【问题标题】:Autohotkey: What's the difference between := and = assignment operatorAutohotkey::= 和 = 赋值运算符有什么区别
【发布时间】:2018-04-20 11:02:31
【问题描述】:

我不太明白 AutoHotKey 中 :== 赋值运算符之间的区别。

手册上,= 是传统赋值,:= 是表达式赋值。我从未见过有人使用= 运算符,只有:=

Reference 和下图

【问题讨论】:

    标签: autohotkey colon-equals


    【解决方案1】:

    您的问题的字面答案是:= 后跟一个表达式= 后跟一个;这些是等价的:

    name = John Smith
    name := "John Smith"
    

    这两种形式存在的原因是 AutoHotKey 的传统语法和结构受到 MSDOS 批处理文件和 unix-shell 脚本等批处理语言的影响。这些语言力求尽可能地具有人类可读性,因为它们进行了很多修改,并且通常不需要您在实际编程语言中看到的复杂逻辑和结构。

    这是执行备份的脚本:

    SOURCE = /home
    DEST = /mnt/backup
    run backup %SOURCE% %DEST%
    

    较新的基于表达式的:= 运算符更加灵活和强大。然而,语法相对更冗长。这里使用新样式运算符的备份并实现变量的默认值(不能使用旧的= 运算符在单行中完成):

    source  := source ? source : "/home"
    dest    := dest ? dest : "/mnt/backup"
    command := "backup " + source + " " + dest
    run %command%
    

    如果您所做的只是分配和执行,那么批处理文件的语法会更简洁且不易出错。但是,如果您需要实现更复杂的逻辑,您可以使用表达式语法更简洁地实现。

    【讨论】:

    • 啊,好吧,现在这更有意义了,我很难理解 autohotkey 语法(与 javascript 或 python 之类的语法相比)
    • 我仍然对dest := dest ? dest : "/mnt/backup" 感到困惑。这看起来像一个三元运算符(条件?真:假)。但是看看等效的脚本DEST=/mnt/backup,它看起来并不是那样
    • 你是对的。第一个示例没有实现默认值。我是在说明,与使用批处理语法相比,您可以在一条简洁的行中使用表达式语法做更多的事情。
    猜你喜欢
    • 1970-01-01
    • 2017-05-27
    • 2010-12-17
    • 2012-07-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多