我的代码有错误:它一直告诉我“试图索引一个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值(这就是我在这里的位置)认为我做错了)
答案 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))