变量,表达式和`if`语句

时间:2017-05-04 16:41:24

标签: autohotkey

我几乎没有关于表达的类似问题。为方便起见,我将它们标记为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)。

1 个答案:

答案 0 :(得分:1)

(Q1)

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

这也有效

a = aaa
b = zzz

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

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

(Q2)

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

(Q3)

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