Cum se repară „încercarea de a indexa o valoare nulă” (Programare, Lua, Null, Minecraft, Opencomputers)

TIIITAN a intrebat.

Am o eroare cu codul meu : îmi tot spune „attempt to index a nil value (global ‘sides’)”.

Încerc să învăț Lua prin Minecraft (OpenComputers) și m-am trezit blocat cu o problemă de valoare nil. Ar putea fi lucruri care nu sunt de fapt din Lua (modul în sine), dar problema se referă la „partea pur 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

Am intrat pe wiki-ul modulului și scrie că redstone.setOutput(sides.left,15) ar trebui să schimbe valoarea reală a ieșirii, dar returnează și valoarea VECHE a ieșirii (și aici cred că greșesc eu)

2 răspunsuri
Purceluș

În codul tău sides nu este definit.

Așa cum ai această linie:

redstone.setOutput(sides.left,15)

unde încerci să indexezi sides folosind operatorul de indexare .

Ca sides este necunoscut în cadrul unui nil în acest domeniu de aplicare, nu o puteți indexa. Acest lucru nu ar avea sens.

Prin mesajul de eroare Lua se plânge de încercarea dumneavoastră.

Pentru a evita această eroare, trebuie să vă asigurați că nu indexați o valoare nulă, fie că nu o indexați, fie că nu este nulă atunci când o indexați.

API-ul Sides este un modul care poate fi încărcat dacă este necesar. există un cod care creează acel API în cadrul unui tabel.

local sides = require("sides")

ar executa acel cod și ar stoca o referință la tabelul API nou creat în variabila locală sides.

După ce se face acest lucru, este legitim să se indexeze sides ca sides nu este nil mai mult, ci un tabel.

sides.left se va referi la valoarea stocată în tabel sides pentru cheia "left"

Comentarii

  • Minunat că a funcționat! Mulțumesc pentru că ați împărtășit și explicația, sper să le fie de folos și altora –  > Por TIIITAN.
user11837120

După cum se menționează pe această pagină, trebuie să apelați require mai întâi, ca în acest fragment:

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