我正在寻找一种方法来澄清我的 Lua 函数的合同。特别是参数应该具有哪些属性。
为了说明我的问题,一些代码片段具有我当前代码的典型结构。使用两个公共函数构造新“实例”的函数。
local function newTextPrinter(color)
return {
print = function(textToPrint)
PrintText(textToPrint, 20, color, 5, 'center');
end,
printBig = function(textToPrint)
PrintText(textToPrint, 30, color, 5, 'center');
end
}
end
一个函数,它接受一个应该具有相同签名(或超集)的参数。
local function printSomeStuff(textPrinter)
textPrinter.print("some")
textPrinter.printBig("stuff")
end
调用后面的函数
local textPrinter = newTextPrinter("ffffffff")
printSomeStuff(textPrinter)
这段代码的问题是,如果textPrinter
不printSomeStuff
查看printSomeStuff
. 虽然使用此示例很容易做到这一点,但通常情况并非如此(在我的场景中强制在文件之间跳跃)。newTextPrinter
除了名称相似之外,也没有任何迹象表明可以通过 获得合适的值。
有没有办法让代码更加自我记录并更好地揭示作者的意图?
我更喜欢一种轻量级的方法,并且不尝试模拟基于类的继承。同样,代码优先于文档,否则,工具可以理解的格式的文档优先于自由格式。很明显,我可以只写“参数textPrinter
需求print
和printBig
公共函数”之类的注释,但是如果没有告诉您您在文档中犯的错误,或者当您重构代码并忘记更新它时,这很容易出错。
我正在使用 Lua 5.0 并且对该语言非常陌生。