Как исправить "попытку индексации нулевого значения"
У меня ошибка с моим кодом: он постоянно говорит мне "попытка индексировать нулевое значение (глобальные" стороны ")"
Я пытаюсь изучить Lua через Minecraft (OpenComputers) и обнаружил, что застрял с проблемой нулевого значения. На самом деле могут быть вещи не от Lua (самого мода), но проблема касается "чистой части 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
Я пошел на вики этого мода, и он говорит, что redstone.setOutput(сторон.left,15) должен изменить фактическое значение вывода, но он также возвращает старое значение вывода (и это, где я думаю, я ' я делаю это неправильно)
2 ответа
В вашем коде стороны не определены.
Как у вас есть эта строка:
redstone.setOutput(sides.left,15)
где вы пытаетесь индексировать sides
используя оператор индексации .
Как sides
неизвестно в nil
значение в этой области вы не можете индексировать его. Это не имеет смысла.
С сообщением об ошибке Lua жалуется на вашу попытку.
Чтобы избежать этой ошибки, вы должны убедиться, что вы не индексируете nil-значение, либо не индексируя его, либо удостоверившись, что оно не равно nil при индексировании.
Sides API - это модуль, который может быть загружен при необходимости. Существует некоторый код, который создает этот API в таблице.
local sides = require("sides")
выполнит этот код и сохранит ссылку на вновь созданную таблицу API в локальной переменной sides
,
После этого законно индексировать sides
как sides
не является nil
больше, но стол.
sides.left
будет ссылаться на значение, хранящееся в таблице sides
для ключа "left"
Как указано на этой странице, вы должны позвонить require
во-первых, как в этом фрагменте:
local component = require("component")
local sides = require("sides")
local rs = component.redstone
rs.setOutput(sides.back, rs.getInput(sides.left))