Scope in LUA



  • Hi Leute.

    Ich schreibe etwas für ein Spiel, das mods erlaubt und das verwendet Lua.
    Jetzt habe ich ein Problem mit dem Scope. Folgender Code:

    ButtonList = {};
    
    function onLoad()
       ButtonList = { button = myButton, texture="Interface\\ButtonTexture" }
    end
    
    function onClick()
       ButtonList.button:Show()
    end
    

    So, jetzt der kennt der natürlich button nicht, weil ich das in onLoad() festgelegt habe. Aber anders isses leider nicht möglich, da erst dort myButton gültig ist. Ich brauche aber dieses Array in der Form. Wie kann man sich da behelfen bei der Deklaration?
    lg



  • Mach einen leeren Platz (einen Schlüssel mit Default-Wert, zB false), den füll dann mit dem Wert, sobald er zur Verfügung steht.

    So ganz klar ist mir nicht, was dein Code soll, einfache Objektorientierung in Lua würde die on* Funktionen als Methoden der ButtonList definieren:

    ButtonListClass = {};

    function ButtonListClass:new()
    local o = {button = false, texture=false}
    setmetatable(o, self)
    self.__index = self
    return o
    end

    function ButtonListClass:onLoad()
    self.button = myButton
    self.texture = "Interface\\ButtonTexture"
    end

    -- [...]

    ButtonList = ButtonListClass:new()

    Oder hab ich da was falsch verstanden?



  • sorry, ich meinte:

    ButtonListClass = {};
    
    function ButtonListClass:new()
       local o = {button = false, texture=false}
       setmetatable(o, self)
       self.__index = self
       return o
    end
    
    function ButtonListClass:onLoad()
       self.button = myButton
       self.texture = "Interface\\ButtonTexture"
    end
    
    -- [...]
    
    ButtonList = ButtonListClass:new()
    


  • Luanoob schrieb:

    Hi Leute.

    Ich schreibe etwas für ein Spiel, das mods erlaubt und das verwendet Lua.
    Jetzt habe ich ein Problem mit dem Scope. Folgender Code:

    ButtonList = {};
    
    function onLoad()
       ButtonList = { button = myButton, texture="Interface\\ButtonTexture" }
    end
    
    function onClick()
       ButtonList.button:Show()
    end
    

    So, jetzt der kennt der natürlich button nicht, weil ich das in onLoad() festgelegt habe. Aber anders isses leider nicht möglich, da erst dort myButton gültig ist. Ich brauche aber dieses Array in der Form. Wie kann man sich da behelfen bei der Deklaration?
    lg

    Wenn onClick nach onLoad ausgeführt wird sollte das gut funktionieren, ButtonList ist eine globale Variable. Hast du eine Fehlermeldung?

    Das "ButtonList = {}" am Anfang ist allerdings unnötig, wenn die Variable eh in onLoad überschrieben wird.


Anmelden zum Antworten