为什么是`#f::true? MsgBox true : 运行 记事本什么都不做?
Why `#f::true ? MsgBox true : Run notepad` does nothing?
我希望 #f::true ? MsgBox true : Run notepad
在按下 #f
时会打开一个带有“true”的消息框,但实际上它什么也没做,谁能解释一下这种行为背后的机制?
命令仅在行首有效,不能内联使用。
您正在做的是将两个变量连接在一起。名为 MsgBox
的变量和名为 true
(或 Run
和 notepad
)[=28= 的变量].
您只能使用内联表达式。
在 AHK v1 中,您当然可以将遗留命令包装在一个函数中,然后内联使用该函数:
#f::true ? MsgBoxFunc(true) : RunFunc("notepad")
MsgBoxFunc(Options := "", Title := "", Text := "", Timeout := "")
{
if (Options && (!Title && !Text && !Timeout))
MsgBox, % Options
else
MsgBox, % Options, % Title, % Text, % Timeout
}
RunFunc(Target, WorkingDir := "", Options := "", ByRef OutputVarPID := "")
{
Run, % Target, % WorkingDir, % Options, pid
OutputVarPID := pid
}
或者在AHK v2中,当然不存在这个问题:
#f::true ? MsgBox(true) : Run("notepad")
我希望 #f::true ? MsgBox true : Run notepad
在按下 #f
时会打开一个带有“true”的消息框,但实际上它什么也没做,谁能解释一下这种行为背后的机制?
命令仅在行首有效,不能内联使用。
您正在做的是将两个变量连接在一起。名为 MsgBox
的变量和名为 true
(或 Run
和 notepad
)[=28= 的变量].
您只能使用内联表达式。
在 AHK v1 中,您当然可以将遗留命令包装在一个函数中,然后内联使用该函数:
#f::true ? MsgBoxFunc(true) : RunFunc("notepad")
MsgBoxFunc(Options := "", Title := "", Text := "", Timeout := "")
{
if (Options && (!Title && !Text && !Timeout))
MsgBox, % Options
else
MsgBox, % Options, % Title, % Text, % Timeout
}
RunFunc(Target, WorkingDir := "", Options := "", ByRef OutputVarPID := "")
{
Run, % Target, % WorkingDir, % Options, pid
OutputVarPID := pid
}
或者在AHK v2中,当然不存在这个问题:
#f::true ? MsgBox(true) : Run("notepad")