【发布时间】:2021-12-20 10:42:25
【问题描述】:
伙计们!
请帮帮我吧!
我想在表格中添加一个数字,我希望它是这样的:
A={1,2,3}
B=A+5
--- now B is {6,7,8}
我不想创建任何类、附加模块。可能是对全局表的某种扩展?
我认为这可以通过全局 __add 覆盖来完成。有什么想法吗?
【问题讨论】:
伙计们!
请帮帮我吧!
我想在表格中添加一个数字,我希望它是这样的:
A={1,2,3}
B=A+5
--- now B is {6,7,8}
我不想创建任何类、附加模块。可能是对全局表的某种扩展?
我认为这可以通过全局 __add 覆盖来完成。有什么想法吗?
【问题讨论】:
A = setmetatable({1,2,3},
{
__add = function (t, add)
assert(type(add) == "number", "invalid addend! number expected")
local result = {}
for i,v in ipairs(t) do
result[i] = v + add
end
return result
end
})
B = A + 5
print(table.concat(B, ","))
C = A + "f"
【讨论】:
您可以通过使用 ipairs 遍历表并将 B 的每个元素设置为数字和 A 的相应元素的总和来做到这一点
例如
local B = {};
local numberToAdd = 5;
for i, v in ipairs(A) do
B[i] = v + numberToAdd;
end
元表也可用于具有语法B = A + 5。您将使用与示例相同的代码,但您需要在 A 上使用 setmetatable,然后将元表的 __add 函数设置为示例代码。
【讨论】: