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?等)