if-statement - 为什么是`PrevActiveClass?WinActivate ahk_class %PrevActiveClass%` 不起作用?
问题描述
PrevActiveClass
分配了一个值,以下代码将不会激活PrevActiveClass
(尽管语法适用于 assignment):
PrevActiveClass ? WinActivate ahk_class %PrevActiveClass%
但以下将激活PrevActiveClass
:
if (PrevActiveClass) {
WinActivate ahk_class %PrevActiveClass%
}
为什么第一个片段不起作用,以及如何在一行代码中实现相同的逻辑?
解决方案
当您使用三元组时,您处于表达式中。
遗留命令只能在遗留语句中使用,所以更清楚地说,只能在新行的开头(在正常情况下)。
您现在要做的是将三个变量连接在一起(并丢弃结果) namedWinActivate
和ahk_class
一个动态变量 named PrevActiveClass
。
如何在一行代码中实现相同的逻辑?
你不能。
你能做的最好的是两行:
if (PrevActiveClass)
WinActivate, % "ahk_class " PrevActiveClass
(我切换到使用表达式,也可以在旧语法中工作,但是 ew,旧语法)
从技术上讲,您当然可以这样做:
WinActivate, % PrevActiveClass ? "ahk_class " PrevActiveClass : "NonExistentWindow"
但这将是一个非常愚蠢的设计。
此外,您可以定义自己的函数来激活窗口,然后在表达式中调用它:
PrevActiveClass ? WinActivateFunc("ahk_class " PrevActiveClass)
WinActivateFunc(WinTitle := "", WinText := "", ExcludeTitle := "", ExcludeText := "")
{
WinActivate, % WinTitle, % WinText, % ExcludeTitle, % ExcludeText
}
有些人实际上这样做是为了他们可以使用内联的旧命令。
我知道人们还制作了一些库,它们为每个(?)遗留命令提供类似的功能。
您应该可以从 AHK 论坛中找到一个。
另外,我想 AHKv2 值得在这里提及,因为 v2 中根本没有遗留语法。那里不存在这个问题。
推荐阅读
- spacy - 重新训练自定义 NER 会丢失有关先前标签的信息
- ibm-watson - 如何在沃森中循环遍历数组?
- javascript - socket io 客户端-服务器/“单播”通道:如何实现它们?
- c# - 编辑 PDF 后,Adobe Acrobat Reader DC 不会将当前文件夹作为另存为目标
- azure - 在 Azure Application Insights 上找不到异常
- node.js - 使用 fastify-mongodb 分离 Routes 文件和模型
- javascript - 控制台中的奇怪结果:将“未定义”附加到输出
- c# - 在linq中分组并显示所有具有相同属性值的组项
- javascript - 使用纯 JavaScript 或 jQuery 将数组数组转换为键值对
- javascript - 如何运行连续监听流的 node.js 函数?