2009-07-01 9 views
5

C# hat this und VB hat ME. Was ist das Lua-Äquivalent?Wie referenziert sich ein Objekt in Lua?

Ich versuche, das Eltern der Skriptklasse in Roblox zu verweisen.

+5

Ich habe "LUA" zu Lua für Sie geändert.Lua ist ein Eigenname, der Name des Erdmondes, auf Portugiesisch. Es ist kein Akronym. – RBerteig

Antwort

10

Vom Lua documentation section 2.5.9, ist die Selbst Referenz in der Regel self:

Die Doppelpunkt-Syntax zur Definition von Methoden verwendet, das heißt Funktionen, die self einen impliziten zusätzlichen Parameter haben. Somit ist die Aussage

function t.a.b.c:f (params) body end 

syntaktischer Zucker für

t.a.b.c.f = function (self, params) body end 
9

Als Greg pointed out already, der Name, den Sie suchen self ist.

Beachten Sie jedoch, dass Lua keine OOP-Sprache mehr ist als eine rein prozedurale oder funktionale Sprache. Es stellt einfach alle Low-Level-Mechanismen zur Verfügung, um ein OOP-Design zu implementieren. Eines der Designprinzipien wurde zum Ausdruck gebracht, "Mechanismus, nicht Politik" zur Verfügung zu stellen. Aus diesem Grund kann nicht garantiert werden, dass die Umgebung, in der Sie ausgeführt werden, Vererbung verwendet oder dass Sie ein übergeordnetes Objekt für ein bestimmtes Objekt finden können.

Es wäre eine gute Idee sein, die Abschnitte der Lua Handbuch, Programmierung in Lua, und das Wiki, die Merkmale beziehen sich auf eine Bewertung OOP:

  • Lua Manual, insbesondere Abschnitte 2.5.8, 2.5.9 und 2.8.
  • PiL Chapter 16, verbunden mit der Online-Kopie der ersten Ausgabe, die zur Zeit von Lua 5.0 geschrieben wurde. Lesen Sie die Online-Kopie, aber beachten Sie, dass die aktuelle Version von Lua ist anders genug, dass der Kauf der 2. Edition wird dringend empfohlen.)
  • Lua Wiki on OOP, vor allem die tutorial und den Artikel auf simple classes.
2

In Lua, wollen Sie den "Selbst" -Wert. Allerdings verwenden Sie ROBLOX, das Sandboxed ist. Jedes Skript wird in einem eigenen Thread ausgeführt, und das Skript zu verweisen, werden Sie brauchen „script“ zu verwenden, dh script.Parent

1
local Table = {} 
Table.Var = "Testing" 

function Table:Test() 
print(self.Var) 
end 
Table:Test() 

oder

local Table = {} 
Table.Var = "Testing" 
function Table.Test(self) 
print(self.Var) 
end 

Beide Funktion wird das gleiche tun genaue Sache.

--Edit--

Dass nur mit Tabellen arbeiten. Wenn Sie versuchen, das übergeordnete Element des Skripts zu erhalten, müssen Sie script.Parent verwenden

- Hinweis script.Parent würde zurückgeben, wo das Skript befindet. Wenn Sie ein weiteres übergeordnetes Element, script.Parent.Parent, hinzufügen, wird das übergeordnete Element des übergeordneten Elements usw. zurückgegeben.