2

我的代码有一个错误:它一直告诉我“尝试索引一个零值(全局'边')”

我正在尝试通过 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) 应该改变输出的实际值,但它也返回输出的 OLD 值(这就是我想我的地方我做错了)

4

2 回答 2

2

在您的代码方面没有定义。

正如你有这条线:

redstone.setOutput(sides.left,15)

您尝试sides使用索引运算符索引的位置.

由于此范围内sides的值未知,nil因此您无法对其进行索引。那是没有意义的。

使用错误消息 Lua 抱怨您的尝试。

为了避免这个错误,你必须确保你没有索引一个 nil 值,要么不索引它,要么在索引它时确保它不是 nil。

Sides API 是一个可以根据需要加载的模块。有一些代码可以在表中创建该 API。

local sides = require("sides")

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

这样做之后,索引不再是合法的,sides而是一个表是合法的。sidesnil

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

于 2019-07-25T17:52:04.387 回答
0

本页所述,您必须先调用require,如以下代码段所示:

local component = require("component")
local sides = require("sides")
local rs = component.redstone
rs.setOutput(sides.back, rs.getInput(sides.left))
于 2019-07-25T17:32:22.673 回答