如何修复“试图索引零值”

时间:2019-07-25 17:25:28

标签: lua null minecraft opencomputers

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

我正在尝试通过Minecraft(OpenComputers)学习Lua,发现自己陷入了零价值问题。可能不是Lua(mod本身)提供的东西,但问题涉及“ pure 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值(这就是我在这里的位置)认为我做错了)

2 个答案:

答案 0 :(得分:2)

在代码方面未定义。

因为你有这行:

redstone.setOutput(sides.left,15)

您尝试使用索引运算符sides索引.的地方

由于在此范围的sides值中nil是未知的,因此您无法对其进行索引。那是没有道理的。

伴随错误消息,Lua抱怨您的尝试。

为避免此错误,您必须通过不对其进行索引或在索引时确保其不为零来确保不对nil值进行索引。

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

local sides = require("sides")

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

这样做之后就可以对sides进行索引,因为sides不再是nil了,而是一个表。

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

答案 1 :(得分:0)

this page所述,您必须先致电require,如以下代码片段所示:

local component = require("component")
local sides = require("sides")
local rs = component.redstone
rs.setOutput(sides.back, rs.getInput(sides.left))