Nun ich wollte hier mal etwas Klar stellen
ich möchte hinweisen das der sich anschließen Text für Programmiere bzw Leute die sich ein bischen mit lua auskennen geschrieben ist
Also ihr habt bestimmt schon öfters mal Funktionen Gesehen wie player:SteamID().
Nun dieser Aufruf ist KEIN normaler Aufruf denn der Spieler ansich ist eine Tabelle ( bzw userdata ).
Welche eine Meta Tabelle hat mit Funktionen...
Nun wie ruft lua die oben gennante Zeiele auf ?
FindMetaTable( "Player" ).SteamID( player )
also merkt man Meta Funktionen haben als ersten Parameter immer ein Referenz auf die Tabelle von der sie aufgerufen werden.
Nun Dies kann man sich leicht zu nutze machen z.b siehe mein lua oop thread dort benutz ich es um objekte zu erstellen.
aber hier noch ein beispiel zum zeigen warum es schlau ist:
local test = { i = 1}
test.print = function( tab ) print( tab.i ) end //nun kennt tabelle test print
es gibt jetzt zwei Möglichkeiten dies aufzurufen:
test:print()
test.print(test)
Beides ist genau gleich!
nun mit diesem Wissen ist es möglich eine Funktion zu erstellen mit der man diese Table returnt um so Objekte in Lua zu haben
local function newTest( )
local tab = { i = 1 }
tab.print = function( this )
print( this.i )
end
return tab
end
local a = newTest()//objekt!
local b = newTest()
Alles anzeigen
nun kann man a:print()->1 und b:print()->1 aufrufen
wenn ich jetzt den Member "i" von "a" ( a.i ) verändere -> a.i = 10
So ändert sich dies nur im Objekt "a" also wenn ich nun "a" printe bekomme ich "10" und bei "b" immer noch "1"
ich hoffe ich konnte einigen weiterhelfen wenn ihr wollt könnt ihr mir fragen stellen und ein Kommentar hinterlassen wenn ihr etwas hinzuzufügen/ Kritik habt:)
K03