我正在学习Lua中的代码并遇到了我的代码问题,这是我第一次使用表,每当我在另一个表中调用一个特定的表时,我的类型为nil,打印表不显示表: xxxxx,因为它通常会(它只是打印一个空白),我假设这意味着我在定义表时做错了什么?
Code:
local craft = { sword = { "cobble", stick = {} } }
print(type(craft.sword[1]))
print(craft.sword[1])
print(type(craft.sword[2]))
print(craft.sword[2])
print(craft)
(这是表的简化版本,用于测试此错误,但仍会在此处出现)
Output:
string
cobble
nil
table: 8a3b983
2 回答
craft.sword
包含键1
和"stick"
,而不是1
和2
. 你所做的相当于:请注意,在任何时候都没有任何东西存储在craft.sword [2]中 .
更一般地说,如果使用值而不是键声明表,如
{ "one", "two", "three" }
,则将它们分配给数字索引,从1开始 . 如果使用键和值声明它,如{ first = "one", second = "two", third = "three" }
,则这些值仅存储在键中您指定了,并且没有任何内容自动存储在数字索引中 . 如果你混合它们,正如你在这里所做的那样 - 使用{ "cobble", stick = {} }
- 没有键的值("cobble"
)将自动分配给数字索引,而那些(stick = {}
)的值将分配给您指定的键 .有关表声明如何工作的完整规范在the manual under Table Constructors中进行了解释 .
表
craft
中的表sword
具有类似于数组的部分和类似哈希的部分的混合索引 . 所以相当于
或(
stick
是一个字符串索引)如果您需要将匿名表放在索引
2
中,您可以像这样使用它:在我的机器上输出测试代码: