est-il possible de vérifier si un script Lua contient des erreurs sans l'exécuter? J'ai des coordonnées: mais si le script contient des erreurs, il passe en premier si et il est exécuté. Je veux savoir s'il contient des erreurs lorsque je le charte, pas quand je l'exécute. Est-ce possible? P> p>
3 Réponses :
Vous pouvez utiliser compilateur Lua . Il ne compilera que votre fichier à bytecode sans l'exécuter. P>
Votre programme aura également l'avantage la course plus rapide si elle est compilée. p>
Vous pouvez même utiliser l'option -P Charger des fichiers mais ne génère pas de fichier de sortie. Utilisé principalement pour la vérification des syntaxes ou les tests de morceaux précompilés: les fichiers corrompus généreront probablement des erreurs lorsqu'elles sont chargées. Pour un test d'intégrité de vol de vol, utilisez -t. P>
blockQuote> -p code> pour effectuer uniquement une vérification de la syntaxe, en fonction de la page homme liée: p>
Je ne peux pas l'utiliser car j'ai des fonctions enregistrées à partir de mon application et que le compilateur ne peut rien savoir sur ces fonctions. Je ne suis pas intéressé à avoir uniquement la vérification de la syntaxe, je souhaite également savoir si quelqu'un appelle des fonctions qui ne sont pas enregistrées (peut-être des problèmes d'orthographe).
Ow. Lua 4.0? La version actuelle est 5.1
@Anexender SO JUSTE Parce que je suis lié à une ancienne entrée manuelle, je reçois un bowvote? BTW, c'est le premier résultat du "compilateur Lua" sur Google, désolé je n'ai pas vérifié la barre d'adresse;)
(Cela a été intégré à l'origine comme une réponse au premier commentaire à la question de Krtek, mais j'ai manqué d'espace là-bas et pour être honnête, cela fonctionne comme une réponse juste.) p>
Les fonctions sont essentiellement des valeurs et une fonction nommée est donc une variable de ce nom. Les variables, par leur définition même, peuvent changer en tant que script est exécuté. Enfer, quelqu'un pourrait redéfinir accidentellement l'une de ces fonctions. Est-ce mauvais? Pour résumer mes pensées: en fonction du script, des paramètres passés et / ou des implémentations réelles de ces fonctions prédéfinies que vous parlez de (l'une pourrait vous non défini ou d'autres, par exemple), il n'est pas possible de garantir le travail des choses à moins que vous ne soyez prêt à réduire certaines de vos demandes. Lua est trop dynamique pour ce que vous recherchez. :) p>
Si vous voulez un test Si vous voulez une vérification de base Cependant, ce sont l'étendue de vos options en ce qui concerne les erreurs pré-vidé avant de se produire. Lua est une langue très dynamique et quelle est une grande force permet également une faiblesse lorsque vous souhaitez prouver l'exactitude. Il y a simplement trop de variables impliquées pour une solution parfaite. P> loadstring code> et l'équivalent C correspondant est pour essayer et
lua_load () < / Code> Le code, chacun d'entre eux convertissant un script lisible en bytecode que vous auriez déjà dû faire avant de pouvoir exécuter le code dans votre utilisation normale All-Well Usecase. (Et si cela contenait les définitions de la fonction, celles-ci devraient être exécutées plus tard pour le code à l'intérieur de ceux qui s'exécutent.) P>
Je voulais vérifier cela parce que j'aurai beaucoup de scripts, certains d'entre eux ne sont exécutés que dans des conditions spéciales qui seront difficiles à tester. Je vais effectuer des tests d'unité pour tous les scripts avec des fonctions Stub pour mes fonctions C ++ pour être sûr qu'ils existent, mais également pour éviter les exécuter. Merci d'avoir répondu!
Heureux d'avoir pu aider. :) Vous pouvez créer très probablement une sorte de type generaTestub (param1type, param2type, ...) code> Fonction qui crée et renvoie une fonction qui jette des erreurs si un ou plusieurs des paramètres ne sont pas de type approprié. . De cette façon, vous pouvez vérifier plus d'une existence de fonctions: vous pouvez vérifier si les paramètres fournis sont de types corrects avec un risque de fausses erreurs. Exemple: si une fonction réelle remplit censement remplir une table avec des chiffres, lorsqu'un autre passe une valeur de la fonction sur une fonction de talon, votre test de test passerait nil (et non un nombre!) Qui provoque ensuite une erreur faussement.
En général, il n'est pas possible, car Lua est une langue dynamique et la plupart des erreurs se produisent en runtime. P>
Si vous souhaitez rechercher des erreurs de syntaxe, utilisez l'option D'autres erreurs courantes déclenchent en abusant des variables globales. Vous pouvez analyser la sortie de Si vous voulez quelque chose de plus avancé, il existe plusieurs outils d'analyse statique fonctionnels plus ou moins fonctionnels pour le code LUA. Commencez par Luainspect . P>
Dans tous les cas, il vous est conseillé d'écrire des tests d'unité au lieu de s'appuyer sur des contrôles de code statique. Moins de douleur, plus de gain. P> luac -p code>. Je l'utilise comme une partie de mon crochet de pré-validation, par exemple. P>
luac -l code> pour attraper ces cas. Voyez ici: http://lua-users.org/wiki/deCingingNeFinedvariables . P>
Nous ne pouvons pas voquer un commentaire, mais si vous avez Google pour "Lua Lint", vous pouvez changer d'avis à ce sujet.