7
votes

Lua auto références

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


2 commentaires

Oui, vous avez répondu à votre propre question


Vraiment, quand j'ai essayé ça n'a pas semblé travailler


4 Réponses :


0
votes

Apparemment, c'est exactement ce que j'ai dit. xxx


2 commentaires

local A 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) "



0
votes

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?" )


3 commentaires

Pouvez-vous expliquer ce que __index fait ici exactement?


@Thomasfarley __ index 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 () . La construction local t = {A} créera une table vide, sauf si une variable A est définie, auquel cas la valeur de la variable A est écrit à l'index 1 à la table. Et la touche index est inutile à la manière sans setmeMetable .



15
votes

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> xxx pré>

ou p> xxx pré>

ou p> xxx pré>

maintenant, vient la partie délicate: p>

invoquant p>

table.member(othertable,1,2)


0 commentaires

3
votes

Gardez à l'esprit que A: B (...) et fonction A: B (...) ... fin est juste un sucre syntaxique. auto ne pointe pas nécessairement sur "l'objet actuel" car contrairement à d'autres langages de programmation, auto est juste une variable et peut être affecté à n'importe quoi. Voir l'exemple ci-dessous pour une démonstration: xxx

est juste xxx

et xxx p> est juste xxx

par conséquent xxx

parce que c'est juste xxx


0 commentaires