2009-07-01 11 views
5

C# ma this, a VB ma ME. Co to jest odpowiednik Lua?Jak odniesienie do samego obiektu w Lua?

Próbuję odwołać się do rodzica klasy skryptu w Roblox.

+5

Zmieniłem "LUA" na Lua dla ciebie.Lua to właściwy rzeczownik, nazwa Księżyca Ziemi, po portugalsku. To nie jest akronim. – RBerteig

Odpowiedz

10

Z Lua documentation section 2.5.9 odniesienie samo jest zwykle self:

Składnia okrężnicy służy do definiowania metod, czyli funkcje, które mają niejawny dodatkowy parametr self. Zatem stwierdzenie

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

jest cukier syntaktyczny dla

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

As Greg pointed out already nazwa szukasz jest self.

Należy jednak pamiętać, że Lua nie jest językiem OOP ani językiem czysto proceduralnym, ani funkcjonalnym. Po prostu zapewnia wszystkie mechanizmy niskiego poziomu do implementacji projektu OOP. Jedna z zasad projektowania została wyrażona jako "zapewnić mechanizm, a nie politykę". Z tego powodu nie można zagwarantować, że środowisko, w którym działasz, używa nawet dziedziczenia lub że możesz znaleźć rodzica dla dowolnego obiektu.

To byłby dobry pomysł, aby przejrzeć sekcje instrukcji Lua, Programowanie w Lua i Wiki, które odnoszą się do OOP funkcje:

  • Lua Manual, zwłaszcza odcinki 2.5.8, 2.5.9 i 2.8.
  • PiL Chapter 16, połączone z kopią online pierwszego wydania, które zostało napisane w czasie Lua 5.0. Przeczytaj kopię online, ale pamiętaj, że obecna wersja Lua jest na tyle inna, że ​​zdecydowanie zaleca się zakup drugiej edycji.)
  • Lua Wiki on OOP, w szczególności tutorial oraz artykuł na temat simple classes.
2

W Lua, będziesz potrzebować wartości "ja". Jednak używasz ROBLOX, który jest piaskownicą. Każdy skrypt jest uruchamiany w jego własnym wątku, i odwoływać się do skryptu, musisz użyć „scenariusz”, czyli script.Parent

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

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

lub

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

Zarówno funkcja zrobi to samo Dokładna rzecz.

--Edit--

Działa to tylko z tabelami. Jeśli próbujesz uzyskać rodzica skryptu, musisz użyć skryptu.Parent

- Uwaga: script.Parent powróci tam, gdzie znajduje się skrypt. Jeśli dodasz innego rodzica, script.Parent.Parent, zwróci to rodzic rodzica i tak dalej.

Powiązane problemy