【问题标题】:lua in a table to get another element of the same tablelua在一个表中获取同一个表的另一个元素
【发布时间】:2023-02-17 08:54:30
【问题描述】:

在表中创建元素时,我需要使用之前在同一个表中创建的另一个元素。请在这件事上给予我帮助。

local table = {
    distance = 30.0,
    last_distance = table.distance-10.0
}

我想做上面的操作但是我做不到,我想我需要使用 self 或 setmetatable 但我不知道该怎么做。请不要给我答案,比如首先在外部创建一个值,然后在表中使用它,我不想那样做。

【问题讨论】:

    标签: lua roblox fivem


    【解决方案1】:

    在 Lua 中,表字段在创建时进行评估。在您的示例中,当您尝试在 last_distance 的定义中访问它时,table.distance 尚未创建,这就是您收到错误的原因。

    实现您想要的一种方法是使用函数创建表并返回它。在函数内,您可以按正确的顺序定义 distance 和 last_distance,然后返回表。这是一个例子:

    local function createTable()
      local t = {
        distance = 30.0,
        last_distance = nil,
      }
      t.last_distance = t.distance - 10.0
      return t
    end
    
    local myTable = createTable()
    print(myTable.distance) -- Output: 30.0
    print(myTable.last_distance) -- Output: 20.0

    这样,last_distance 字段是在定义 distance 之后定义的,因此 last_distance 的计算可以使用正确的 distance 值。

    或者,您可以在定义距离后使用表构造函数设置 last_distance:

    local table = {
      distance = 30.0,
      last_distance = function(t) return t.distance - 10.0 end,
    }
    
    print(table.distance) -- Output: 30.0
    print(table.last_distance(table)) -- Output: 20.0

    在这里,last_distance 被定义为一个函数,它将表格作为参数并返回计算值。当您需要访问 last_distance 的值时,您可以调用该函数并将表作为参数传入。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多