为什么是`PrevActiveClass? WinActivate ahk_class %PrevActiveClass%` 不工作?

Why `PrevActiveClass ? WinActivate ahk_class %PrevActiveClass%` is not working?

PrevActiveClass被赋值,下面的代码不会激活PrevActiveClass(虽然):

PrevActiveClass ? WinActivate ahk_class %PrevActiveClass%

但以下将激活 PrevActiveClass:

if (PrevActiveClass) {
  WinActivate ahk_class %PrevActiveClass%
}

为什么第一个片段不起作用,如何在一行代码中实现相同的逻辑?

当你使用三元时,你在一个表达式中。

Legacy命令只能在legacy语句中使用,所以说的更清楚,只能在新行的开始(正常情况下) .

您现在要做的是将三个变量连接在一起 (并丢弃结果) 命名为 WinActivate, ahk_class 和一个名为 PrevActiveClass.

的动态变量

how to implement the same logic in one line of code?

你不能。

你最多只能写两行:

if (PrevActiveClass)
  WinActivate, % "ahk_class " PrevActiveClass

(我切换到使用表达式,也可以在旧语法中工作,但是哎呀,旧语法)

从技术上讲,您当然可以这样做:

WinActivate, % PrevActiveClass ? "ahk_class " PrevActiveClass : "NonExistentWindow"

但那将是一个非常愚蠢的设计。

此外,您可以定义自己的函数来激活 window,然后在表达式中调用它:

PrevActiveClass ? WinActivateFunc("ahk_class " PrevActiveClass)

WinActivateFunc(WinTitle := "", WinText := "", ExcludeTitle := "", ExcludeText := "")
{
  WinActivate, % WinTitle, % WinText, % ExcludeTitle, % ExcludeText
}

有些人实际上这样做是为了他们可以内联使用遗留命令。

我知道人们也制作了一些库,它们为每个(?)遗留命令提供类似的功能。

你应该可以从 AHK 论坛中找到一个。


此外,我想 AHKv2 在这里值得一提,因为 v2 中根本没有遗留语法。那里不存在这个问题。