Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Types 表中的Lua表显示为零_Types_Lua_Null_Lua Table - Fatal编程技术网

Types 表中的Lua表显示为零

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

我正在学习用Lua编写代码,但我的代码遇到了一个问题,这是我第一次使用表,每当我调用另一个表中的一个特定表时,我得到的类型为零,打印该表时不会像通常那样显示表:xxxxx(它只是打印一个空白)我假设这意味着在定义表时我做错了什么

代码:

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=
,它工作得非常好!我现在似乎很清楚我做错了什么,但我一辈子都无法找出我做错了什么:)