【问题标题】:Computercraft error attempt to call nil on a turtle.inspectDown() return valueComputercraft 错误尝试在 turtle.inspectDown() 返回值上调用 nil
【发布时间】:2021-03-02 10:42:34
【问题描述】:

我在第 42 行有一个错误

if parseBlock(bl1.name) then

parseBlock 是我创建的一个函数,用于检查该块是否为矿石(我有许多来自不同模组的不同矿石)
我把它缩小到这一行

local success1,bl1 = turtle.inspectDown()

成功1为真
bl1 为零

想知道为什么 inspectDown() 返回 nil?乌龟下面也有一个方块。
方块是:undergroundbiomes:igneous_stone

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

【问题讨论】:

  • parseBlock 为零

标签: lua minecraft computercraft


【解决方案1】:

我目前无法在 computercraft API 中确认这一点,但如果我没记错的话,它确实遵循 Lua 约定,即在错误时返回一个值或 nil+消息。这意味着:

发生错误时,该函数将返回nil 和一个字符串形式的错误描述。但是,当 no 错误发生时,该函数将只返回其结果。这里的区别在于结果将是函数的first返回值。

通常可以这样处理:

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

【讨论】:

    猜你喜欢
    • 2022-11-23
    • 2017-07-17
    • 2011-07-30
    • 2018-05-30
    • 2021-07-11
    • 2020-04-10
    • 1970-01-01
    • 1970-01-01
    • 2021-04-27
    相关资源
    最近更新 更多