如何从表成员中引用lua表的成员?

我有一个 Lua 表格:

enUS = {
   LOCALE_STHOUSANDS = ",",  --千位分隔符,例如逗号

   patNumber = "%d+["..LOCALE_STHOUSANDS.."%d]*", --查找数字的正则表达式

   ["PreScanPatterns"] = {
      ["^("..patNumber..") Armor$"] = "ARMOR",
   }
}

所以您可以看到这个表格中有一个完整的自我引用链:

  • LOCAL_STHOUSANDS
    • patNumber
      • ["^("..patNumber..") Armor$"]

如何在 Lua 表格中执行自引用?


我不想硬编码更改值;有数百个引用:

enUS = {
   LOCALE_STHOUSANDS = ",",  --千位分隔符,例如逗号

   patNumber = "%d+[,%d]*", --查找数字的正则表达式

   ["PreScanPatterns"] = {
      ["^(%d+[,%d]*) Armor$"] = "ARMOR",
   }
}
点赞
用户734069
用户734069

如何在 lua 表中进行自循引用?

你不能。

Lua 不是 C。在表构造之前,表条目都不存在。因为表本身尚不存在。因此,你不能让表构造函数中的一个条目引用另一个尚不存在的表中的条目。

如果你想减少重复输入,那么应该使用本地变量和 do/end 块:

do
  local temp_thousands_separator = ","
  local temp_number_pattern = "%d+["..LOCALE_STHOUSANDS.."%d]*"

  enUS = {
   LOCALE_STHOUSANDS = temp_thousands_separator,  --千位分隔符,例如逗号

   patNumber = "%d+["..temp_thousands_separator.."%d]*", --查找数字的正则表达式

   ["PreScanPatterns"] = {
      ["^("..temp_number_pattern..") Armor$"] = "ARMOR",
   }
  }
end

do/end 块在那里,以便临时变量在表创建代码之外不存在。

或者,您可以分阶段进行构造:

  enUS = {}
  enUS.LOCALE_STHOUSANDS = ","  --千位分隔符,例如逗号

  enUS.patNumber = "%d+["..enUS.LOCALE_STHOUSANDS.."%d]*" --查找数字的正则表达式

  enUS["PreScanPatterns"] = {
      ["^("..enUS.patNumber..") Armor$"] = "ARMOR",
   }
2012-08-08 00:43:13
用户1516484
用户1516484

无法在构造函数内部完成此操作,但是您可以在创建表格后使用以下方法执行:

enUS = {
   LOCALE_STHOUSANDS = ","
}

enUS.patNumber = "%d+["..enUS.LOCALE_STHOUSANDS.."%d]*"
enUS.PreScanPatterns = {
  ["^("..enUS.patNumber..") Armor$"] = "ARMOR",
}

如果您需要特别引用当前表格,Lua提供了一个“self”参数,但它仅在函数中可访问。

local t = {
  x = 1,
  y = function(self) return self.x end
}

-- 这在功能上等同于t.y
function t:z() return self.x end

-- 这些是相同的和交替使用
print(t:y(), t.z(t))
-- 1, 1
2012-08-08 00:43:30