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
endfunction 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?
lgWenn 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.