【问题标题】:Add a value to table fields (lua)向表字段添加值(lua)
【发布时间】:2021-12-20 10:42:25
【问题描述】:

伙计们!

请帮帮我吧!

我想在表格中添加一个数字,我希望它是这样的:

A={1,2,3}
B=A+5
--- now B is {6,7,8}

我不想创建任何类、附加模块。可能是对全局表的某种扩展?

我认为这可以通过全局 __add 覆盖来完成。有什么想法吗?

【问题讨论】:

    标签: lua lua-table


    【解决方案1】:
    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"
    

    【讨论】:

    • 嗨!我们可以在不将 A 设置为元表的情况下实现它吗?我的意思是.. 更改全局运算符、覆盖全局元表或调试?顺便说一句,也谢谢你的这种方法
    • 没有,除非你用 C 语言改变 Lua 每个你想添加东西的表都需要一个实现 __add 的元表
    【解决方案2】:

    您可以通过使用 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 函数设置为示例代码。

    【讨论】:

    • 谢谢,我知道这个方法,这是通常的方法。我想用'+'操作符,但不在A上使用元表,也许我们可以改变全局或调试表?
    猜你喜欢
    • 2017-08-22
    • 1970-01-01
    • 2023-03-31
    • 2013-02-11
    • 2016-01-30
    • 2012-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多