如何修复“尝试索引一个空值”的问题

我的代码出现了一个错误: 它一直告诉我“尝试索引一个空值 (全局变量'sides')"

我正在尝试通过 Minecraft (OpenComputers) 学习 Lua, 但是我被空值问题困住了。可能会有一些不是来自 Lua(mod本身)的东西,但问题涉及"纯 Lua 部分"

component = require("component")
event = require("event")
computer = require("computer")
term = require("term")

gpu = component.gpu

redstone = component.redstone

gpu.setResolution(160,50)

while true do
    term.clear()
    term.setCursor(1,1)
    gpu.setBackground(0x5A5A5A)

    gpu.set(1,1," Allumer lampe    Eteindre lampe")
    term.setCursor(1,2)

    local _,_,x,y = event.pull("touch")

    if x >= 2 and x <= 14 and y == 1 then
        redstone.setOutput(sides.left,15)
    elseif x >= 19 and x <= 32 and y == 1 then
        redstone.setOutput(sides.left,0)
    else
        main()

    end

end

我查阅了 mod 的 wiki,发现 redstone.setOutput(sides.left,15) 应该改变输出的实际值,但它也返回输出的旧值 (这就是我认为我做错了的地方)

点赞
用户88888888
用户88888888

此页面所述,您首先必须调用 require,例如此代码片段:

local component = require("component")
local sides = require("sides")
local rs = component.redstone
rs.setOutput(sides.back, rs.getInput(sides.left))
2019-07-25 17:32:22
用户2858170
用户2858170

在你的代码中,sides 没有被定义。

因为你有这一行代码:

redstone.setOutput(sides.left,15)

你试图使用索引运算符“.”来索引 sides

由于 sides 在此范围内是未知的 nil 值,因此您不能索引它。那是没有意义的。

Lua 报告了这个错误。

为避免此错误,您必须确保不要索引空值,可以通过不索引它或确保在索引时它不为 nil 来实现。

Sides API 是一个可以随时加载的模块。

local sides = require("sides")

会执行该代码,并将新创建的 API 表的引用存储在局部变量 sides 中。

这样做后,可以将 sides 索引为 sides 不再是 nil,而是一个表。

sides.left 将引用存储在表 sides 中键为 "left" 的值。

2019-07-25 17:52:04