Lua元表问题

  • 本文关键字:问题 Lua lua
  • 更新时间 :
  • 英文 :


我有一个工作定义的元表(见下文),但我不能使它像我想要的那样工作。当我向ht提供一组值时。数组(见下文),它工作良好。当我试图给它一个表,它不工作显然,因为它期望一个范围的值,而不是一个嵌套的表。但是,即使我修改了ht。数组中去掉嵌套的表(比如a = a[1])就行不通了。什么好主意吗?非常感谢!总之,我的目标是v1 = ht。数组{{1,2,3}},当我做v1 + v1时,它会起作用。

ht = {}
local mt = {}
function ht.array (a)
    array = {} 
    setmetatable(array, mt)
    for k, v in ipairs(a) do
        array[k] = v
    end
    return array
end
function ht.add (a, b) 
    local res = ht.array{}
    for k in pairs(a) do res[k] = a[k] + b[k] end
    return res
end
mt.__add = ht.add
-- This works
v1 = ht.array{4,5,6}
v2 = ht.array{3,45,90}
c = v1 + v2
for k, v in ipairs(c) do
    print(v)
end
-- But this does not work
a = {3,4,5}
b = {9,1,11}
v1 = ht.array{a}
v2 = ht.array{b}
c = v1 + v2
for k, v in ipairs(c) do
    print(v)
end

首先,为什么不这样做呢?

v1 = ht.array(a)
v2 = ht.array(b)

这样你调用"数组"函数(奇怪的名字顺便说一下)与表,而不是包含另一个表的单元素表。但是,如果您希望它支持包含另一个表的单元素表,则可以将此快速hack添加到ht.array:

的顶部。
if type(a[1]) == 'table' then
    a = a[1]
end

最新更新