Lua是否有类似于Swift或C#中的variable?.function()的功能? 大家好!
我最近在用Lua编程,已经厌倦了写一些类似这样的代码Lua是否有类似于Swift或C#中的variable?.function()的功能? 大家好!,lua,Lua,我最近在用Lua编程,已经厌倦了写一些类似这样的代码 if variable ~= nil then variable.function() end 我知道在C#或Swift中,我们可以做类似的事情 variable?.function() Lua是否有一些方法来实现这种功能?摘自第四版“Lua编程”中的“表”一节: Lua不提供安全的导航操作员,我们认为它也不应该提供。Lua是极简主义者。此外,这个操作符是相当有争议的,许多人争论——不是没有原因的——它促进了粗心的编程。然而,我
if variable ~= nil then
variable.function()
end
我知道在C#或Swift中,我们可以做类似的事情
variable?.function()
Lua是否有一些方法来实现这种功能?摘自第四版“Lua编程”中的“表”一节:
Lua不提供安全的导航操作员,我们认为它也不应该提供。Lua是极简主义者。此外,这个操作符是相当有争议的,许多人争论——不是没有原因的——它促进了粗心的编程。然而,我们可以在Lua中用一些额外的符号来模拟它
建议的额外符号可能适用于您的情况
((variable or {}).func or function() end)()
这将检查变量
是否为nil
(或false
),如果不是,则尝试访问其条目func
(请注意,不能命名函数函数
,因为这是一个关键字)-如果不存在,则返回一个不执行任何操作的函数,否则,它将返回函数variable.func
。结果函数立即被调用
不过,我认为这不是很可读。编写一个简单的实用程序函数很容易:
function call_if(func, ...)
if(func) then
return func(...)
end
return
end
哇,它确实通过Lua的语法来解决这个问题。但是,是的,它变成了从三行代码到一行更复杂的形式。不管怎样,我明白了。非常感谢您的回答!您可以将
nil
设为可索引和可调用:debug.setmetatable(nil,{uuuuu index={},{uuu call=function()end})
之后,您可以在不进行任何检查的情况下执行var.func()然后,您应该重新评估您的编程风格,您经常会问一个变量是否为nil
。