Как исправить "попытку индексации нулевого значения"

У меня ошибка с моим кодом: он постоянно говорит мне "попытка индексировать нулевое значение (глобальные" стороны ")"

Я пытаюсь изучить 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))
Другие вопросы по тегам