Comment réussissez-vous des variables dans un programme avec soi-même?
Comme dans Java, vous avez: p>
local a function sa(a) self.a = a end
4 Réponses :
Apparemment, c'est exactement ce que j'ai dit.
local A code> n'est pas nécessaire; Il n'a rien à voir avec le reste du code.
Non, c'est totalement différent. 1) local A est inutile, la fonction intérieure utilisée est celle reçue comme paramètre et masquer l'autre 2) Self est une valeur globale et n'a aucune valeur attribuée, donc c'est nul 3) Si vous ada une ligne qui appelle SA, comme SA ("Test") Vous recevrez une erreur d'exécution: "Tentative d'indexation globale" Self '(une valeur nulle) "
C'est quelque peu la façon dont vous le disiez, mais l'approche de l'OOP est un peu différente. Ce qui suit est en fait la méthode.
t.sa( t, "some string this time?" )
Pouvez-vous expliquer ce que __index fait ici exactement?
@Thomasfarley __ index code> Voici simplement Mise en œuvre de l'héritage .
Il n'y a pas d'approche de la «vraie» dans la Lua, car elle ne définit aucune limitation de l'OOP, la seule chose que Lua fournit en termes de sucre syntaxique de Tableau: méthode () code>. La construction
local t = {A} code> créera une table vide, sauf si une variable
A code> est définie, auquel cas la valeur de la variable
A code> est écrit à l'index
1 code> à la table. Et la touche code> index code> est inutile à la manière sans
setmeMetable code>.
en Lua, vous n'avez pas de mise en œuvre de classe spécifique, mais vous pouvez utiliser une table pour la simuler. Pour rendre les choses plus simples, Lua vous donne un "sucre syntaxique":
Pour déclarer un membre de classe, vous pouvez utiliser ces syntazes équivalentes complètes p> ou p> xxx pré> ou p> maintenant, vient la partie délicate: p> invoquant p> table.member(othertable,1,2)
Gardez à l'esprit que est juste p> et p> par conséquent p> parce que c'est juste p> A: B (...) code> et
fonction A: B (...) ... fin code> est juste un sucre syntaxique.
auto code> ne pointe pas nécessairement sur "l'objet actuel" car contrairement à d'autres langages de programmation,
auto code> est juste une variable et peut être affecté à n'importe quoi. Voir l'exemple ci-dessous pour une démonstration:
Oui, vous avez répondu à votre propre question
Vraiment, quand j'ai essayé ça n'a pas semblé travailler