Lua 在';自我';功能,如obj:功能名称
我有一个类对象,我想要表中的最高键整数Lua 在';自我';功能,如obj:功能名称,lua,lua-table,Lua,Lua Table,我有一个类对象,我想要表中的最高键整数 obj = {1,2,3} obj[6] = 7 --this works with vec_len(obj) function vec_len(a) if not a then return 0 end max_key = 0 for k, _ in pairs(a) do if k > max_key then max_key = k end end return max_key end
obj = {1,2,3}
obj[6] = 7
--this works with vec_len(obj)
function vec_len(a)
if not a then return 0 end
max_key = 0
for k, _ in pairs(a) do
if k > max_key then max_key = k end
end
return max_key
end
--but now if I want this function to be only available to my object then this
--somehow doesn't work
function obj:vec_len()
if not self then return 0 end
max_key = 0
for k, _ in pairs(self) do
if k > max_key then max_key = k end
end
return max_key
end
我想要6作为输出。我不知道出了什么问题。有人能帮忙吗?使用带有_index metamethod的元表,指向一个包含您的函数的表,该函数将在不迭代函数的情况下调用(您的代码就是这样做的)
使用带有_index metamethod的元表,指向包含函数的表,该函数将在不迭代函数的情况下调用(代码就是这样做的)
什么东西不管用?我的意思是,除了在某一点上,你要将一个整数与字符串“vec_len”进行比较之外?如果你想
vec_len
对obj
以外的其他东西进行操作,那么你为什么要将a
改为self
?对不起,这是个打字错误,我做了我的edit@NicolBolas Lua编译器抱怨访问nil类型,我敢肯定,当Lua查看obj表时,函数ref不可用。请将pairs
替换为ipairs
(您键入的k
可能是“vec\len”
现在,这是一个字符串,无法与数字进行比较)它有什么问题?我的意思是,除了在某一点上,你要将一个整数与字符串“vec_len”进行比较之外?如果你想vec_len
对obj
以外的其他东西进行操作,那么你为什么要将a
改为self
?对不起,这是个打字错误,我做了我的edit@NicolBolas Lua编译器抱怨访问nil类型,我敢肯定,当Lua查看obj表时,函数ref不可用。请将pairs
替换为ipairs
(您键入的k
可能是“vec\len”
现在,这是一个字符串,无法与数字进行比较)虽然这解决了问题,但可能不是最佳做法。虽然这解决了问题,但可能不是最佳做法。
obj = {1,2,3}
obj[6] = 7
setmetatable(obj, {
__index = { -- set index metamethod with another table
vec_len = function(self) -- you can call obj:vec_len() and self will be the table without the functions
local max_key = 0
for k, _ in pairs(self) do
if k > max_key then
max_key = k
end
end
return max_key
end
}
})
---------------------
--> print(obj:vec_len())
--> 6