Computercraft 错误尝试在 turtle.inspectDown() return 值上调用 nil
Computercraft error attempt to call nil on a turtle.inspectDown() return value
我在第 42 行有错误
if parseBlock(bl1.name) then
parseBlock 是我用来做一些检查以查看该块是否是矿石的函数(我有许多来自不同模组的不同矿石)
我把它缩小到这一行
local success1,bl1 = turtle.inspectDown()
成功 1 为真
bl1 为零
想知道为什么 inspectDown() 返回 nil?乌龟下面也有一个方块。
该块是:undergroundbiomes:igneous_stone
我进入 lua 程序来执行相同的代码行,但它确实正确地打印了它下面的块的名称。
我目前无法在 computercraft API 中确认这一点,但如果我没记错的话,它确实遵循 Lua 约定,即 return 在错误时输入一个值或 nil+ 消息.这意味着:
当错误发生时,该函数将return nil
和错误描述作为字符串。但是,当 no 错误发生时,该函数将只是 return 它的结果。这里的区别在于结果将是函数的 first return 值。
一般情况下可以这样处理:
local result, err = some_function()
if result then
do_something_with(result)
else
print("Error! " .. err)
end
然而,虽然这可能是 success1
为零的原因,但它并不能解释您收到的错误消息。 Lua 告诉您您正在尝试调用 nil
,而您提供的代码中只有一个函数调用:parseBlock
.
正如 Egor Skriptunoff 指出的那样,parseBlock
很可能是 nil
,这会在您尝试调用它时导致错误。您可以通过简单地在调用它的行上方添加 print(parseBlock)
来确认这一点,如果它显示 nil
,那么您就找到了问题的原因。
否则,您必须添加更多信息:
- 您收到的确切错误消息
- 周围的几行代码通常很有用(根据经验,前 3 行和后 3 行)
- 有关您的代码结构的信息(所有函数都在一个文件中吗?您是否从其他地方加载
parseBlock
?等)
我在第 42 行有错误
if parseBlock(bl1.name) then
parseBlock 是我用来做一些检查以查看该块是否是矿石的函数(我有许多来自不同模组的不同矿石)
我把它缩小到这一行
local success1,bl1 = turtle.inspectDown()
成功 1 为真
bl1 为零
想知道为什么 inspectDown() 返回 nil?乌龟下面也有一个方块。
该块是:undergroundbiomes:igneous_stone
我进入 lua 程序来执行相同的代码行,但它确实正确地打印了它下面的块的名称。
我目前无法在 computercraft API 中确认这一点,但如果我没记错的话,它确实遵循 Lua 约定,即 return 在错误时输入一个值或 nil+ 消息.这意味着:
当错误发生时,该函数将return nil
和错误描述作为字符串。但是,当 no 错误发生时,该函数将只是 return 它的结果。这里的区别在于结果将是函数的 first return 值。
一般情况下可以这样处理:
local result, err = some_function()
if result then
do_something_with(result)
else
print("Error! " .. err)
end
然而,虽然这可能是 success1
为零的原因,但它并不能解释您收到的错误消息。 Lua 告诉您您正在尝试调用 nil
,而您提供的代码中只有一个函数调用:parseBlock
.
正如 Egor Skriptunoff 指出的那样,parseBlock
很可能是 nil
,这会在您尝试调用它时导致错误。您可以通过简单地在调用它的行上方添加 print(parseBlock)
来确认这一点,如果它显示 nil
,那么您就找到了问题的原因。
否则,您必须添加更多信息:
- 您收到的确切错误消息
- 周围的几行代码通常很有用(根据经验,前 3 行和后 3 行)
- 有关您的代码结构的信息(所有函数都在一个文件中吗?您是否从其他地方加载
parseBlock
?等)