如何向表类型添加方法?我正在尝试编写一个搜索表值的方法.到目前为止我有.
function table:contains(value)
for _, v in ipairs(self) do
if v == value then return true end
end
return false
end
Run Code Online (Sandbox Code Playgroud)
然而,当我尝试做以下事情时.
t = {'four', 'five', 'six'}
t:contains('five')
Run Code Online (Sandbox Code Playgroud)
我收到了错误.
stdin:1: attempt to call method 'contains' (a nil value)
Run Code Online (Sandbox Code Playgroud)
有什么建议?
正如有人说了,你t是一个简单的表,它仅包含下列键值对:[1]='four',[2]='five',[3]='six'.
如果要"扩展" t以便能够从table模块访问函数,则必须设置__index指向table模块的元表.我使用以下函数轻松访问它:
function T(t)
return setmetatable(t, {__index = table})
end
Run Code Online (Sandbox Code Playgroud)
然后你可以按如下方式使用它(感谢语法糖,不需要括号):
t = T{'four', 'five', 'six'}
t:insert('seven')
print(t:contains('seven')) --> true
Run Code Online (Sandbox Code Playgroud)
没有所有表的单个元表。与字符串和数字不同,每个表都有其自己的单独的元表。
只需为这些事情创建一个自由函数而不是一个“成员”函数即可。并不是所有的东西都必须都是面向对象的:。