Lua中的函数重载?

我正在为Fibaro家庭自动化系统编写一些脚本(“场景”),需要了解如何在Lua中做一些好东西。Fibaro有它自己的debug函数,但为了测试Lua函数而不必一直在Fibaro Lua场景界面中工作是更可取的。

有一个函数fibaro:debug,它处理界面中信息的简单打印。基本上就是print在控制台上的作用。 所以,我想在我的函数中为目前可用的两个函数中的一个分配一个别名。

我试着处理它就像一个默认值:

local printFunc = fibaro:debug or print;

但它不起作用。一个明确的IF / ELSE块也失败了:

if(fibaro:debug == nilthen printFun = fibaro:debug; else printFun = print; end;

我该怎么做?

点赞
用户6834680
用户6834680
局部变量 `printFunc` 赋值为 `print` 函数。
如果 `fibaro` 表不为空,并且拥有 `debug` 键,则定义一个新的函数 `printFunc`,其作用是将参数传递给 `fibaro:debug` 方法并返回结果。
2016-11-21 10:21:14
用户107090
用户107090

冒号操作符只能在方法调用中使用,因此这是语法错误:

local printFunc = fibaro:debug or print

可以使用点操作符来编写:

local printFunc = fibaro.debug or print

但是如果fibaro.debug存在,则需要显式地向printFunc提供一个fibaro对象,它将作为fibaro.debug的第一个(隐藏)参数。

2016-11-21 10:28:50
用户3979429
用户3979429
local printFunc = (fibaro or {}).debug and function(...) return fibaro:debug(...) end or print

将fibaro对象的debug函数赋给printFunc,如果fibaro是空,就用print函数。

2016-11-21 10:51:23