假设我有一个返回布尔值的函数,并且有一个设置覆盖的函数,以便第一个函数始终返回指定的布尔值。第二个函数看起来像这样:
function override(override, bool)
bool = bool and true or false --convert to pure Boolean
if override then
boolOverride = bool
else
boolOverride = nil
end
end
但是,我想让它在没有指定 bool 的情况下也可以bool = not boolOverride
。所以那就是这样的:
function override(override, bool)
if type(bool) == "nil" then
bool = not boolOverride
else
bool = bool and true or false --convert to pure Boolean
end
if override then
boolOverride = bool
else
boolOverride = nil
end
end
bool = bool and true or false
问题是,如果参数明确为零而不是不存在,我希望它运行默认选项。我可以用来实现这一目标的两种情况之间有什么区别吗?
就在这里!Lua 在堆栈上传递参数并返回值。“堆栈在此处结束”(“无”)和“堆栈上有一个 nil 值”之间存在差异。区分两者的最直接方法是使用
select("#", ...)
,它可以为您提供堆栈上剩余值的计数。让我们编写一个简单的函数,如果调用一个参数,它会执行一件事,如果调用没有参数/“无”(空变量参数),则执行另一件事,否则会出错: