Lua 中是否有类似于 Swift 或 C# 中的变量?.function() 的特性?

大家好!

最近我在用 Lua 进行编程,但是疲倦于写下如下的代码

if variable ~= nil then
    variable.function()
end

我知道在 C# 或 Swift 中,可以这样写

variable?.function()

Lua 是否有一些方法来实现这种特性?

点赞
用户9593596
用户9593596

从“Programming in Lua”,第4版,表“表”部分:

Lua不提供安全导航运算符,我们不认为它应该提供。Lua非常简约。此外,该运算符非常有争议,许多人争辩——不是没有原因——它会促进疏忽的编程。但是,我们可以在Lua中使用一些额外的符号来模拟它。

建议使用的额外符号可以是:

((variable or {}).func or function() end)()

这将检查variable是否为nil(或false),如果是,则尝试访问其条目func(请注意,您不能将函数命名为“function”,因为那是一个关键字)-如果不存在,则返回一个不做任何操作的函数,否则返回函数variable.func。结果函数立即被调用。

我不认为这很容易阅读。

2019-08-28 07:01:15
用户734069
用户734069

很容易编写一个简单的实用工具函数:

function call_if(func, ...)
  if(func) then
    return func(...)
  end
  return
end
2019-08-28 11:59:07