变量、表达式和“if”语句

Variables, expressions, and `if` statement

我几乎没有关于表达式的类似问题。为了方便起见,我将它们标记为Q1,Q2和Q3。

首先。如文档中所述,

表达式中的变量名不包含在百分号中(伪数组和其他双重引用除外)。因此,文字字符串必须用双引号引起来以区别于变量。Source

据我了解,这意味着我们应该编写如下代码:

a = aaa
b = zzz

if (a = "aaa" or b = "bbb")
    MsgBox, It works!

不过,这似乎也有效:

a = aaa
b = zzz

if (%a% = aaa or %b% = bbb)
    MsgBox, It works!

第二种方式有没有缺点? (Q1)

我自己发现的一个可能的缺点是,如果变量仅包含数字,则第二种方法将不起作用。这行不通:

a = 111
b = 999

if (%a% = 111 or %b% = 222)
    MsgBox, It works!

为什么它现在停止工作了? (Q2)

而且,如果变量只包含数字,似乎没有必要在表达式中引用它的值:

a = 111
if (a = "111") ; Also works for a = "aaa"
    MsgBox, It works!

a = 111
if (a = 111)   ; It will not work for a = "aaa". We forced to us quote signs if var contains letters.
    MsgBox, It works too.

为什么第二种方法 (if (a = 111)) 有效,我们应该或不应该避免它? (Q3).

(Q1)

如果变量在表达式中用百分号括起来(在您的示例 %a% 中),则该变量包含的任何内容都被假定为另一个变量的名称或部分名称。

这也有效

a = aaa
b = zzz

if (%a% = a or %h% = cc)
    MsgBox, It works!

因为未指定变量 %a% 和 %h% 的值。

(Q2)

如果 var 和 value 都是纯数字,它们将作为数字而不是字符串进行比较。 否则,它们将按字母顺序作为字符串进行比较(即,字母顺序将确定 var 是大于、等于还是小于 value)。

(Q3)

只有文字字符串必须用双引号引起来。 如果变量只包含数字,则不需要引用。