这在 Lua 中是什么意思? "var = var or"

请问这是什么意思?我知道基本的变量声明和赋值,但这很令人困惑。这两者有什么区别:

var = var or {
        "one",
        "two",
        "three",
    }

var = { "one",
        "two",
        "three",
    }

我快速查看了手册,但没有找到解释。

点赞
用户646619
用户646619

or 不返回布尔值;相反,如果它们都不为真,则返回第一个 truthy 值或最后一个 falsey 值。

例如:

print(nil or 123) -- 123
print(123 or nil) -- 123
print(456 or 123) -- 456
print(nil or false or "hi") -- hi

你发现的那行代码是使用此属性的惯用方式,如果变量为 nilfalse,则将其设为默认值,但保留其值,如果它是其他任何值。 示例

function foo(arg)
    arg = arg or "hello world!"
    print(arg)
end

foo() -- "hello world!"
foo("goodbye world!") -- "goodbye world!"

and 也类似工作;它返回第一个 falsey 值或最后一个 truthy 值。通过同时使用两个,您还可以模拟三元运算符:

function foo(bool)
    print(bool and "yes" or "no") -- second value (the true value) must be truthy
end
print(foo(true)) -- "yes"
print(foo(false)) -- "no"
print(foo(123)) -- "yes"
2014-12-09 13:27:07