1
x:=1
;All of these (silently) fail
IfGreater,x, false, EnvAdd, x, 1
IfEqual,false,%x%, EnvAdd, x, 1
IfEqual,true,x, EnvAdd, x, 1
IfEqual,1,1, EnvAdd, x, 1
If x, EnvAdd, x, 1
If (x), EnvAdd, x, 1
tf:=true
if true, EnvAdd, x, 1
if tf, EnvAdd, x, 1
;If %x%, EnvAdd, x, 1
If 1, EnvAdd, x, 1
If 0, EnvAdd, x, 1
;
;though these succeed
x:=1
IfEqual,true,%x%, EnvAdd, x, 1 ; x is now 2
x:=1
IfEqual,x,%x%, EnvAdd, x, 1 ; x is now 2

无论如何,AutoHotKey Help 的“If/IfEqual/...”页面中的语句是否可以使用朴素的“if”语句来实现?

“如果您使用命令名样式,则另一个命令只能与 IF 语句出现在同一行。”

4

4 回答 4

2

更好的是可以写:

test ? x:=y+1
or
test ? statement

并且(伪)IF 语句接近可理解性!

于 2013-08-08T19:09:16.877 回答
1

啊,所以可以简单地说

x+=x?1:0

我曾经认为 AutoHotKey 的语法是拜占庭式的。现在我只是觉得这很奇怪。例如,其文档的这种公然矛盾。但我质疑这来自试图追踪微软。

于 2013-08-08T17:21:11.247 回答
0

您是否考虑过使用三元运算符?

例子:

Age := 60
Msgbox % "You " ((Age < 45) ? ("are under 45") : ("are over 45"))

这里有一个很好的指南。虽然它在进行变量赋值或返回值时最有用。

于 2013-08-08T12:34:57.990 回答
0

不,AutoHotkey 并没有真正通过 1-liners 做很多事情(除了重新映射热键)。

但是您可以将 if 语句包装在函数或子程序中,然后您可以在单行上运行..

x = 0
EnvAdd(x)    ;x stays 0
EnvAdd(1)    ;x becomes 2
EnvAdd(x)    ;x becomes 3

;since x is global, EnvAdd will modify x

EnvAdd(whatvalue){
  global x
  msgbox, Hey, a value of %whatvalue%

  if(whatvalue = 1){
     x:= 2
  }else if(whatvalue = 2){
     x:= 3
  }else{
     ;do something
  }
}
于 2013-08-08T00:44:22.177 回答