我遇到过一些看起来像这样的代码
If (condition) Then
array(index) = array(index) Or variable
End If
Run Code Online (Sandbox Code Playgroud)
由于不熟悉VB,它在我看来就像是在赋值语句和条件子句之间的某种可爱的结果.
在功能上,我认为它看起来像某种?:三元操作.我现在假设它,虽然肯定不是我习惯的形式.
我知道第一个分支会为自己分配数组(索引),这实际上就是我正在处理的代码是如何工作的.我不认为它与这个问题有关,但它有点让我感到奇怪,并且通常比我用VB意识到的要多得多.
不是重复的是VB.NET中有条件三元运算符吗?因为那个问题是询问是否有一个,而不是"这是什么意思"
VBA中没有三元运算符.你得到的最接近的是IIf,它会评估真实的和虚假的表达式(所以不要使用它,当任一分支有副作用!):
IIf({bool-expression}, {value-if-true}, {value-if-false})
Run Code Online (Sandbox Code Playgroud)
所以它不像三元组.
我们不知道有什么array(index),但我们假设它是一些Long:
array(index) = SomeLongInteger Or variable
Run Code Online (Sandbox Code Playgroud)
您正在查看的是常规任务:
foo = 42 Or variable
Run Code Online (Sandbox Code Playgroud)
运行时将分配foo一个值.首先,它必须计算赋值(=)运算符的右侧:
42 Or Variable
Run Code Online (Sandbox Code Playgroud)
的Or操作者经常被用来作为一个逻辑运算符在布尔表达式.
但是,上面的表达式不是布尔表达式,并且Or运算符在此不是逻辑运算符.
它是一个按位运算符(在VB中,逻辑和按位运算符是相同的,这确实有点(双关语)混淆).在分配foo = 42 Or Variable,foo将采取的值按位进行比较的42 Or Variable.
Debug.Print 42 Or 12 'prints 46
Run Code Online (Sandbox Code Playgroud)
用二进制思考.这是42:
00101010
Run Code Online (Sandbox Code Playgroud)
这是12:
00001100
Run Code Online (Sandbox Code Playgroud)
然后你按位或两个值(记住你的真值表?True Or True = True; True Or False = True; False Or False = False),你会得到这样的:
00101110
Run Code Online (Sandbox Code Playgroud)
..which是二进制表示 - 这是正确的 - 46.
那么,array(index) = array(index) Or variable做到以下几点:
array(index)variablearray(index)| 归档时间: |
|
| 查看次数: |
135 次 |
| 最近记录: |