我有以下自动热键脚本:
A:= 5
B := "7"
C := A.B
MsgBox %C%
Run Code Online (Sandbox Code Playgroud)
第三行不起作用.
我期待输出"57"
我尝试过以下方法:
C := %A%.%B%
C := (A).(B)
C := (A.B)
C := (%A%.%B%)
C := (%A%).(%B%)
Run Code Online (Sandbox Code Playgroud)
这些都不起作用
谁能告诉我怎么做?
我使用的是1.1.09.04版
刚刚更新到最新版本1.1.14.01,它仍然是相同的
MCL*_*MCL 24
您区分了表达式(:=)和"正常"值分配(=).您可以通过多种方法实现目标,如以下示例所示:
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%
Run Code Online (Sandbox Code Playgroud)
此代码将打印:
str1 = 57
str2 = 57
str3 = 57
val1 = 57
val2 = 56789
Run Code Online (Sandbox Code Playgroud)
在AHK中,所有这些方法都应该是准等价的:它们产生相同类型的输出.数学方法将变量标记为数字,导致可能的尾随零,您可能希望Round()在显示之前.我们的字符串连接的输出也可以用作数字,因为如果需要,AHK会自动将它们装箱.例如,您可以计算
z := str1 - 1
并评估为56.
我个人更喜欢数学方法,因为它会导致实际数字而不是字符串,这似乎是合乎逻辑的.