2010-09-19 2 views

Répondre

5

L'interpréteur Lua est conçu pour être intégré dans une application d'hébergement. Il est de la responsabilité de cette application de transmettre les arguments de la ligne de commande (ou l'équivalent de l'application) au script par un mécanisme approprié.

Lorsqu'il est utilisé en tant que langage autonome, l'application d'hébergement est l'exécutable lua, implémenté par lua.c dans la distribution source Lua. Quand il commence, lua regroupe tous les arguments de ligne de commande dans la variable globale arg sous la forme d'un tableau. arg[0] contient le nom du fichier de script en cours d'exécution, et arg[1] et plus tard contiennent tous les arguments passés à ce script sur la ligne de commande. Il stocke également le solde de la ligne de commande à des indices négatifs dans le tableau arg. Pour la commande lua sample.lua a b c alors le tableau est construit comme si la cession

 
arg = { [-1]="lua", [0]="sample.lua", "a", "b", "c" } 

a été réalisée avant que le script est exécuté. Cette affectation est effectuée par la fonction getargs(), qui laisse également les arguments de script sur la pile Lua afin que le script puisse également y accéder en tant qu'arguments variés de la fonction de niveau supérieur du script via le mot clé ....

Si un module utilisé à partir d'un script doit accéder aux arguments de la ligne de commande, il le fera probablement à partir de la table globale arg. Cela permettrait de savoir si le module a été écrit en C ou Lua. L'accès à l'environnement global arg nécessite que l'environnement du module n'ait pas été modifié pour empêcher l'accès aux globals.

J'ai laissé ouverte la question importante de conception globale de savoir si c'est une bonne conception pour permettre à un module de dépendre des arguments de la ligne de commande. Je peux voir qu'un module qui fournit l'analyse des arguments pourrait vouloir faire les choses de cette façon, mais même alors, je recommanderais que l'analyseur d'option soit passé les arguments par son appelant plutôt que de les lire directement depuis le global. Cela facilite la récupération des arguments d'une variable d'environnement ou d'un fichier de configuration, par exemple.

Questions connexes