Computercraft错误:尝试在turtle.inspectDown()返回值上调用nil

我在第42行遇到了一个错误

if parseBlock(bl1.name) then

parseBlock是一个我创建的函数,用于执行一些检查,以查看该块是否是矿石(我有很多来自不同模组的不同矿石)。

我将问题缩小到了这一行

local success1,bl1 = turtle.inspectDown()

success1是true

bl1是nil

想知道为什么inspectDown()返回nil?turtle下方有一个方块。

该方块为:undergroundbiomes:igneous_stone

我进入了lua程序执行相同的代码行,但是它打印了其下方块的名称。

点赞
用户4984564
用户4984564

我目前不能确认这一点在 Computercraft API 中是否正确,但我记得它遵循 Lua 约定,在出错时返回一个值或 nil+错误信息。这意味着:

当错误发生时,函数将返回 nil 和一个字符串类型的错误描述。然而,在没有错误发生时,函数将返回其结果。这里的区别是,结果将是该函数的第一个返回值。

通常可以这样处理:

local result, err = some_function()
if result then
   do_something_with(result)
else
   print("Error! " .. err)
end

但是,虽然这很可能是 success1nil 的原因,但它并没有解释你得到的错误信息。Lua 告诉你正在尝试调用 nil,而在你提供的代码中只有一个函数调用:parseBlock

正如 Egor Skriptunoff 所指出的,parseBlock 很可能是 nil,这会在你尝试调用它时导致错误。你可以通过在调用它的那行代码上面添加 print(parseBlock) 来确认这一点,如果它显示为 nil,那么你已经找到了问题的原因。

否则,你需要添加更多的信息:

  • 你得到的确切错误信息
  • 几行周围的代码通常很有用(通常是前 3 行和后 3 行)
  • 关于你的代码结构的信息(所有函数都在一个文件中吗?你是从其他地方加载了 parseBlock 吗?等等)
2020-11-19 08:56:50