给表字段添加一个值(lua)

大家好!

你能帮我忙一下吗?

我想向表格中添加一个数字,并且我想像这样:

A={1,2,3}
B=A+5
--- 现在B是{6,7,8}

我不想创建任何类、其他模块。也许可以通过全局表扩展来实现?

我想这可以通过全局 __add 覆盖来实现.. 有什么想法吗?

原文链接 https://stackoverflow.com/questions/69869125

点赞
stackoverflow用户13429318
stackoverflow用户13429318

你可以通过使用ipairs遍历表,将每个元素设置为数字和A对应元素的和来实现这一点。例如:

local B = {};
local numberToAdd = 5;
for i, v in ipairs(A) do
    B[i] = v + numberToAdd;
end

也可以使用元表来使语法为B = A + 5。你需要使用示例中的相同代码,但需要在A上使用setmetatable,然后将元表的__add函数设置为示例代码。

2021-11-07 03:26:56
stackoverflow用户2858170
stackoverflow用户2858170
A = setmetatable({1,2,3},
  {
    __add = function (t, add)
      assert(type(add) == "number", "invalid addend! number expected")  -- 断言,如果 add 不是数字类型则报错
      local result = {}
      for i,v in ipairs(t) do
        result[i] = v + add  -- 将 A 中的每个元素都加上 add
      end
      return result
    end
  })

B = A + 5  -- 将 A 中的元素都加上 5,并将结果赋值给 B
print(table.concat(B, ","))  -- 将 B 中的元素按逗号分隔输出
C = A + "f"  -- 断言失败,报错,因为 "f" 不是数字类型
2021-11-07 08:03:10