2009-07-01 4 views
5

C# a this et VB a ME. Quel est l'équivalent de Lua?Comment un objet se réfère-t-il dans Lua?

J'essaie de référencer le parent de la classe de script dans Roblox.

+5

J'ai changé "LUA" en Lua pour vous.Lua est un nom propre, le nom de la Lune de la Terre, en portugais. Ce n'est pas un acronyme. – RBerteig

Répondre

10

De l'Lua documentation section 2.5.9, la référence de soi est généralement self:

La syntaxe du côlon est utilisé pour la définition des méthodes, à savoir, les fonctions qui ont un paramètre supplémentaire implicite self. Ainsi, la déclaration

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

est le sucre syntaxique pour

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

Comme Greg pointed out already, le nom que vous recherchez est self. Cependant, sachez que Lua n'est pas un langage OOP, pas plus qu'un langage purement procédural ou fonctionnel. Il fournit simplement tous les mécanismes de bas niveau pour implémenter une conception OOP. Un des principes de conception a été exprimé: «fournir un mécanisme, pas une politique». Pour cette raison, il n'existe aucun moyen de garantir que l'environnement dans lequel vous exécutez utilise l'héritage ou que vous pouvez trouver un parent pour un objet donné.

Ce serait une bonne idée de revoir les sections du manuel Lua, programmation en Lua et le Wiki qui se rapportent à POO caractéristiques:

  • Lua Manual, en particulier les sections 2.5.8, 2.5.9 et 2.8.
  • PiL Chapter 16, lié à la copie en ligne de la première édition, qui a été écrit à l'époque de Lua 5.0. Lisez la copie en ligne, mais sachez que la version actuelle de Lua est suffisamment différente pour que l'achat de la 2ème édition soit fortement recommandé.)
  • , en particulier le tutorial et l'article sur simple classes.
2

Dans Lua, vous voulez la valeur "self". Cependant, vous utilisez ROBLOX, qui est un bac à sable. Chaque script est exécuté dans son propre fil, et de référencer le script, vous devrez utiliser « script », à savoir script.Parent

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

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

ou

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

deux fonction fera la même chose exacte.

--Edit--

Cela ne fonctionne avec des tables. Si vous essayez d'obtenir le parent du script, vous devez utiliser script.Parent

--Note script.Parent retournera où le script est situé. Si vous ajoutez un autre parent, script.Parent.Parent, il retournera le parent du parent, et ainsi de suite.

Questions connexes