Types 表中的Lua表显示为零
我正在学习用Lua编写代码,但我的代码遇到了一个问题,这是我第一次使用表,每当我调用另一个表中的一个特定表时,我得到的类型为零,打印该表时不会像通常那样显示表:xxxxx(它只是打印一个空白)我假设这意味着在定义表时我做错了什么 代码:Types 表中的Lua表显示为零,types,lua,null,lua-table,Types,Lua,Null,Lua Table,我正在学习用Lua编写代码,但我的代码遇到了一个问题,这是我第一次使用表,每当我调用另一个表中的一个特定表时,我得到的类型为零,打印该表时不会像通常那样显示表:xxxxx(它只是打印一个空白)我假设这意味着在定义表时我做错了什么 代码: local craft = { sword = { "cobble", stick = {} } } print(type(craft.sword[1])) print(craft.sword[1]) print(type(craft.sword[2])) p
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)
string
cobble
nil
table: 8a3b983
(这是该表的简化版本,用于测试此错误,但此处仍会出现此错误)
输出:
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)
string
cobble
nil
table: 8a3b983
craft.swar
包含钥匙1
和“stick”
,而不是1
和2
。您所做的工作相当于:
local craft = {}
craft.sword = {}
craft.sword[1] = "cobble"
craft.sword.stick = {}
请注意,在任何时候都没有任何东西存储在工艺。剑[2]
更一般地说,如果您使用值而不是键来声明一个表,如{“一”、“二”、“三”}
中所述,它会将它们从1开始分配给数字索引。如果使用键和值声明它,如在{first=“one”、second=“two”、third=“three”}
中所述,则这些值仅存储在指定的键中,数字索引中不会自动存储任何内容。如果您将它们混合在一起,就像您在这里所做的那样-使用{“cobble”,stick={}
-没有键(“cobble”
)的值将自动分配给数字索引,有键(stick={}
)的值将分配给您指定的键
表声明如何工作的完整规范在中进行了解释。表
craft
中的表swarm
具有类似数组的部分和类似散列的部分的混合索引。所以
local craft = { sword = { "cobble", stick = {} } }
相当于
local craft = { sword = { 1 = "cobble", stick = {} } }
或(stick
是字符串索引)
如果需要将匿名表放入索引2
,可以这样使用它:
local craft = { sword = { "cobble", { stick = {} } } }
-- ^ ^
在我的机器上输出测试代码:
string
cobble
table
table: 003CA158
table: 003CB0C8
您使用的是标准的Lua解释器吗?第四次
打印
的输出应该是nil
,而不是空行。不,我使用的是Minecraft的“Computercraft”mod,我猜它使用的是定制的解释器。然后你应该编辑你的问题,添加这些信息以供将来参考。当你这样做的时候,我们都可以删除我们的评论来清理线程。谢谢你,我只是从我的程序中的代码中删除了stick=
,它工作得非常好!我现在似乎很清楚我做错了什么,但我一辈子都无法找出我做错了什么:)