这在Lua中意味着什么?"var = var or"

Str*_*ogg 2 lua

你能告诉我这是什么意思吗?我知道基本的变量声明和分配,但这很令人困惑.这有什么区别

var = var or {
        "one",
        "two",
        "three",
    }
Run Code Online (Sandbox Code Playgroud)

var = { "one",
        "two",
        "three",
    }
Run Code Online (Sandbox Code Playgroud)

我快速检查手册,找不到解释.

Col*_*Two 7

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

例如:

print(nil or 123) -- 123
print(123 or nil) -- 123
print(456 or 123) -- 456
print(nil or false or "hi") -- hi
Run Code Online (Sandbox Code Playgroud)

您找到的行是惯用法使用此属性将变量设置为默认值(如果是nil或)false,但如果是其他任何内容则保留其值.例

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

foo() -- "hello world!"
foo("goodbye world!") -- "goodbye world!"
Run Code Online (Sandbox Code Playgroud)

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"
Run Code Online (Sandbox Code Playgroud)