Dans Lua, comment pouvez-vous imprimer le nom de la fonction en cours, comme l'identifiant C99 __func__?
Quelque chose comme ceci:
function foo()
print( __func__ )
...
end
Comment peut-il être fait?
source d'informationauteur x-x
Vous devez vous connecter pour publier un commentaire.
Vous ne pouvez pas. En lua, les fonctions de premier ordre sont variables. Donc ils n'ont pas de noms. Vous pourriez aussi bien demander: "quel est le nom de 2" est. Tout simplement parce que certaines variables a été affecté de la valeur '2' ne fait pas que de la variable le nom de 2. De la même façon "someFunc" est une variable potentiellement l'un des nombreux - qui détient une fonction particulière.
Alors que je suis d'accord avec Éphraïm réponseque le code ne sera pas toujours le même nom, comme l'a souligné Chris Becke. Lorsque la fonction est affectée à une autre variable, le "nom" serait changé.
Ici est une autre alternative. Il utilise simplement une chaîne de caractères pour identifier la fonction. Cette méthode résout le changement de nom d'un problème, mais introduit une question d'entretien. La chaîne aurait besoin d'être synchronisé avec le nom de la fonction avec les futurs refactorisation.
Sinon, si l'emplacement de la fonction est plus importante que le nom, le suivant peut-être mieux. Il permettra de donner un nom à la fonction qui est basé sur la source et le numéro de ligne.
Si le
__func__
semble encore mieux, et la norme Lua n'est pas important, puis le Lua analyseur peut être modifié comme il est dans cet exemple pour__FICHIER__
et_LIGNE___
.De sortie:
Utiliser le Débogage De La Bibliothèque. Il fournit un
getinfo(func)
une fonction qui retourne un tableau avec les informations sur cette fonction.Fonctions n'ont pas forcément besoin d'eux. C'est parfaitement légal en Lua pour créer des fonctions anonymes, sans nom et l'appeler, sans l'affecter.
Est parfaitement valide Lua. Quel nom voulez-vous donner à cette fonction?
Vous pouvez essayer:
debug.getinfo(1)
Retourne cette structure de l'actuel état de l'exécution de la fonction dans la pile.Si n est plus grand que le nombre de fonctions actives dans la pile,
debug.getinfo()
retourne nil.C'est pourquoi vous devez vérifier si elle existe avant de prendre *.nom et retourne une chaîne vide si l'information n'est pas disponible
Un il est appelé à l'intérieur de la
ExportDB()
fonction, il retourne le nom