我遇到过一些看起来像这样的代码
If (condition) Then
array(index) = array(index) Or variable
End If
由于不熟悉VB,它在我看来就像是在赋值语句和条件子句之间发生了某种可爱的结果。
从功能上来说,我认为它看起来像某种?:三元操作。我现在假设它是,虽然肯定不是以前的形式。
我知道第一个分支会为自己分配数组(索引),这基本上就是我工作的代码的工作方式。我并不认为它与这个问题相关,但它有点让我感到奇怪,而且通常会比我对VB的认识更多。
不是Is there a conditional ternary operator in VB.NET?的重复,因为那个问题是询问是否有一个,而不是"这是什么意思"
答案 0 :(得分:5)
VBA中没有三元运算符。你得到的最接近的是IIf
,它会评估 true 和 false 表达式(所以当任何一个分支都有副作用时,不要使用它!) :
IIf({bool-expression}, {value-if-true}, {value-if-false})
所以它不像三元一样。
我们不知道array(index)
中的内容,但我们假设它有些Long
:
array(index) = SomeLongInteger Or variable
您正在查看的是常规作业:
foo = 42 Or variable
运行时将为foo
分配值。首先,它必须计算赋值(=
)运算符的右侧:
42 Or Variable
Or
运算符通常用作布尔表达式中的逻辑运算符。
但是上面的表达式不是布尔表达式,Or
运算符不是逻辑运算符。
它是按位运算符(在VB中,逻辑和按位运算符是相同的,这实际上有点(双关语)混淆)。在作业foo = 42 Or Variable
中,foo
将获取42 Or Variable
的按位比较的值。
Debug.Print 42 Or 12 'prints 46
用二进制思考。这是42:
00101010
这是12:
00001100
然后你按位或这两个值(记住你的真值表?True Or True = True
; True Or False = True
; False Or False = False
)和你明白了:
00101110
..这是 - 的右边的二进制表示 - 46。
因此,array(index) = array(index) Or variable
执行以下操作:
array(index)
variable
array(index)