如何向表类型添加方法?我正在尝试编写一个搜索表值的方法。到目前为止,我有。
function table:contains(value)
for _, v in ipairs(self) do
if v == value then return true end
end
return false
end
然而,当我尝试做以下事情时。
t = {'four', 'five', 'six'}
t:contains('five')
我收到了错误。
stdin:1: attempt to call method 'contains' (a nil value)
有什么建议吗?
答案 0 :(得分:7)
正如其他人所说,您的t
是一个简单的表格,它只包含以下键值对:[1]='four'
,[2]='five'
,[3]='six'
。
如果要“扩展”t
以便能够从table
模块访问函数,则必须设置一个指向{{1}的__index
的元表。模块。我使用以下函数轻松访问它:
table
然后你可以按如下方式使用它(感谢语法糖,不需要括号):
function T(t)
return setmetatable(t, {__index = table})
end
答案 1 :(得分:4)
所有表都没有单个元表。与字符串和数字不同,每个表都有自己独立的元表。
为这些事情做一个免费的功能而不是“成员”功能。并非一切都需要:
等所有OOP。
答案 2 :(得分:3)
您已向table
库添加了一个方法,但尚未向表t
提供任何元表。 table
和t
之间没有自动连接。