我有以下自动热键脚本:
A:= 5
B := "7"
C := A.B
MsgBox %C%
第三行不起作用。
我期待输出“57”
我尝试了以下内容:
C := %A%.%B%
C := (A).(B)
C := (A.B)
C := (%A%.%B%)
C := (%A%).(%B%)
哪一项都不起作用
谁能告诉我怎么做?
我正在使用版本1.1.09.04
刚刚更新到最新版本1.1.14.01并且仍然相同
答案 0 :(得分:21)
您区分了表达式(:=
)和“正常”值分配(=
)。您可以通过多种方法实现目标,如以下示例所示:
a := 5
b := 7
x := 6789
; String concatenation
str1 = %a%%b%
; or as an expression
str2 := a b
; or with explicit concatenation operators
str3 := a . b
; Mathematical "concatenation"
; if b has exactly one digit
val1 := a*10 + b
; for any integer
val2 := a * (10**StrLen(x)) + x ; ** is the "power" operator
msgbox, str1 = %str1%`nstr2 = %str2%`nstr3 = %str3%`nval1 = %val1%`nval2 = %val2%
此代码将打印:
str1 = 57
str2 = 57
str3 = 57
val1 = 57
val2 = 56789
在AHK中,所有这些方法都应该是准等价的:它们产生相同类型的输出。数学方法将变量标记为数字,导致可能的尾随零,您可能希望在显示之前Round()
。我们的字符串连接的输出也可以用作数字,因为如果需要,AHK会自动将它们装箱。例如,您可以计算
z := str1 - 1
它将评估为56
我个人更喜欢数学方法,因为它会导致实际数字而不是字符串,这似乎是合乎逻辑的。