Lua 中的函数重载?

Function overloading in Lua?

我正在 Fibaro 家庭自动化系统中编写 som 脚本 ("scenes"),需要自我介绍如何在 Lua 中做一些好事。 Fibaro 有它自己的调试功能,但是对于不需要一直在 Fibaro Lua 场景界面中工作的 Lua 功能的简单测试会更好。

有一个函数fibaro:debug可以处理界面中信息的简单打印。基本上 print 在控制台上做了什么。 因此,我想在我的函数中做的是为目前可用的这两个函数之一分配一个别名。

我试过像默认值一样处理它:

local printFunc = fibaro:debug or print;

这是行不通的。显式 IF/ELSE 块也失败:

if(fibaro:debug == nil) then printFun = fibaro:debug;else  printFun =print;end;

我该怎么做?

local printFunc = print
if (fibaro or {}).debug then 
   function printFunc(...) 
      return fibaro:debug(...)
   end
end

冒号运算符只能在方法调用中使用,因此这是一个语法错误:

local printFunc = fibaro:debug or print

这可以用点运算符来写

local printFunc = fibaro.debug or print

但是如果 fibaro.debug 存在,那么你需要明确地提供 printFunc 一个 fibaro 对象,fibaro.debug 期望它作为它的第一个(隐藏)参数。

local printFunc = (fibaro or {}).debug and function(...) return fibaro:debug(...) end or print