gpt4 book ai didi

带有 OR 子句的 VBA 赋值语句

转载 作者:行者123 更新时间:2023-12-01 16:41:29 24 4
gpt4 key购买 nike

我遇到过一些看起来像这样的代码

If (condition) Then
array(index) = array(index) Or variable
End If

由于不熟悉 VB,在我看来,这就像赋值语句和条件子句之间的某种可怕的爱情结果。

从功能上来说,我认为它看起来像某种 ?: 三元运算。我现在假设它是,尽管肯定不是我习惯的形式。

我知道第一个分支会将数组(索引)分配给自身,这基本上就是我正在处理的代码的工作原理。我不认为这与这个问题相关,但这让我有点奇怪,而且 VB 中发生的事情往往比我意识到的更多。

不是 Is there a conditional ternary operator in VB.NET? 的重复项因为这个问题是问是否存在,而不是“这到底是什么意思”

最佳答案

是什么。

VBA 中没有三元运算符。您得到的最接近的是 IIf,它同时计算 truefalse 表达式(因此当任一分支有副作用时不要使用它! ):

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 运算符通常用作 bool 表达式中的逻辑运算符

但是上面的表达式不是 bool 表达式,并且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 或 False = False) 你会得到这个:

00101110

..这是 - 没错 - 46 的二进制表示。


因此,array(index) = array(index) 或者变量执行以下操作:

  • 读取数组(索引)的值
  • 读取变量的值
  • 按位或两个值
  • 将该操作的结果分配回array(index)

关于带有 OR 子句的 VBA 赋值语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39985372/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com