使用字符串调用表格

好的,我直接切入点。我目前正在为 RedM 编写脚本,但我遇到了一些麻烦。我有一个需要调用的表格,但我需要能够使用字符串来调用它,尽管我已经尝试了几天来解决这个问题,但我没有得到任何帮助。下面是我正在尝试做的快速示例。

Table = {
    "Value 1",
    "Value 2",
    "Value 3"
}

local _Table = "Table"
    for key, value in pairs(_Table) do
        print(value)
    end

我想要实现的是将该表格中的所有内容打印出来,但是当您尝试使用字符串时,您会收到以下错误:

$lua main.lua
lua: main.lua:9: bad argument #1 to 'for iterator' (table expected, got string)
stack traceback:
    [C]: in function 'next'
    main.lua:9: in main chunk
    [C]: in ?

显然,当您不使用字符串时,该脚本可以正常工作,但对我来说无法奏效。说实话,我甚至不确定我正在尝试做的事情是否可能,但如果有人有解决方案,那将是非常感激的。lol。

点赞
用户2858170
用户2858170
  1. 除非元表实现了__call,否则无法调用表。我认为你在这里混淆了一些基本术语。

  2. 你的代码没有意义

-- 这行将字符串"Table"赋值给_Table
local _Table = "Table"
-- 现在你把它放进了pairs,但它只接受table作为输入
for key, value in pairs(_Table) do
  print(value)
end

Table 是全局变量,就像例子中那样,你可以通过全局环境 _G 访问它。

for key, value in pairs(_G.Table) do print(value) end

或者

local _Table = "Table"
for key, value in pairs(_G[_Table]) do print(value) end
2021-02-13 19:56:45
用户4984564
用户4984564

如果我理解正确的话,你想要通过变量名获取一个表格。只有在变量是全局的情况下,这才有可能(永远把你的变量设为局部变量,孩子们),而即使如此,它也不是最优雅的解决方案。

一个更好的替代方案可能是:将您的表格放入另一个表格中:

local Tables = {
   Table_1 = { 1, 2, 3, }
   Table_2 = { 2, 3, 4, }
}

print(Tables["Table_1"])

这样可以保持全局范围的干净,并允许您将整个表格集合作为单个值传递。

2021-02-13 20:16:24