【发布时间】:2020-12-03 07:55:06
【问题描述】:
在 Lua 中,我看到了一些方法,例如 string 和 io 类,它们允许您自动从表中调用方法,而无需为此实例化对象,例如:
以下代码:
local tb = {"Hello", "World!"}
table.concat(tb)
可以这样写:
local tb = {"Hello", "World!"}
tb:concat()
我试图创建一个可以做同样事情的方法:
local tst = {}
function tst:test()
print("test")
end
但以下代码不起作用:
local tb = {"Hello", "World!"}
tb:test()
只有当我通知代码tb = tst:
local tb = tst
tb:test()
我的问题是,我有什么方法可以像第二个示例那样自动创建处理字符串或表的方法,而无需实例化类?比如,把我的表称为表:MyMethod()
【问题讨论】:
-
tb:concat()不能开箱即用。你需要给tb一个元表。 -
@lhf 我应该如何创建这个元表?比如,我应该使用什么样的元方法来实现这一点?
-
__index,Lua 有一本很棒的手册,我建议你读一读。 Programming in Lua: 13.4.1 – The __index Metamethod也相关16.1 Classes -
你在什么 lua 环境下工作?您是否尝试过将方法添加到
table? -
你总是必须实例化一个对象才能调用它的方法。字符串是用字符串文字实例化的。文件用
io.open实例化。表用{}实例化,另外你必须给它们一个元表来提供方法。
标签: class methods lua lua-table