用字符串调用表



好吧,我开门见山了。我目前正在为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。

如果我理解正确的话,您希望通过变量名获得表。这只有在变量是全局的情况下才有可能,而这是不应该的(总是让你的变量是局部的,孩子们),即使这样,它也不是最优雅的解决方案。

一个更好的选择可能是:把你的表放在另一个表中:

local Tables = {
Table_1 = { 1, 2, 3, }
Table_2 = { 2, 3, 4, }
}
print(Tables["Table_1"])

这使全局作用域保持干净,并允许您将整个表集作为单个值传递。

  1. 不能调用一个表,除非它的元表实现了__call。我想你在这里混淆了一些基本术语。

  2. 你的代码没有意义

-- this line assigns the string "Table" to _Table
local _Table = "Table"
-- now you put into pairs which may only take a table as input
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