使用给定名称创建 table?

Create a table with a given name?

我真的不明白为什么这不会使用给定名称创建 table。有人可以帮我澄清一下吗?

local table={}

local function createtable(tabname, propername)
    table.tabname={}
    table.tabname.propername=propername or "need a proper name"
end

createtable(foo, "first table")
createtable(bar, "second table")

for k,v in pairs(table) do
    print("table name: "..k)
end

输出:

table name: tabname

为什么在函数调用中不使用给定的变量值?

你的意思是 tab[tabname]={} 而不是 tab.tabname={}

tab.str 语法将 . 之后的位视为字符串键而不是变量。

也不要使用 table 作为 table 名称。您隐藏了默认的 table 库。

也在 createtable(foo, "first table") 中,除非 foo 变量已经存在,它等同于 createtable(nil, "first table")。您是说 createtable("foo", "first table") 吗?