第一版是为 Lua 5.0 编写的。虽然在很大程度上仍然适用于后续版本,但还是有一些区别。
第四版针对 Lua 5.3,可在 亚马逊 和其他书店购买。
购买本书,您还将帮助 支持 Lua 项目


3.3 – 逻辑运算符

逻辑运算符是 andornot。与控制结构一样,所有逻辑运算符都将 falsenil 视为 false,而将其他任何内容视为 true。运算符 and 在其第一个参数为 false 时返回该参数;否则,它返回其第二个参数。运算符 or 在其第一个参数不为 false 时返回该参数;否则,它返回其第二个参数
    print(4 and 5)         --> 5
    print(nil and 13)      --> nil
    print(false and 13)    --> false
    print(4 or 5)          --> 4
    print(false or 5)      --> 5
andor 都使用短路求值,即它们仅在必要时才求值其第二个操作数。

一个有用的 Lua 惯用法是 x = x or v,它等效于

    if not x then x = v end
即,当 x 未设置时,它将 x 设置为默认值 v(前提是 x 未设置为 false)。

另一个有用的惯用法是 (a and b) or c(或简单地 a and b or c,因为 and 的优先级高于 or),它等效于 C 表达式

    a ? b : c
前提是 b 不为 false。例如,我们可以使用类似以下语句来选择两个数字 xy 中的最大值
    max = (x > y) and x or y
x > y 时,and 的第一个表达式为 true,因此 and 产生其第二个表达式 (x)(它也是 true,因为它是一个数字),然后 or 表达式产生其第一个表达式的值,x。当 x > y 为 false 时,and 表达式为 false,因此 or 产生其第二个表达式,y

运算符 not 始终返回 truefalse

    print(not nil)      --> true
    print(not false)    --> true
    print(not 0)        --> false
    print(not not nil)  --> false