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
我正在 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