Déclarer une variable globale dans une fonction en LUA
J'ai une fonction à l'intérieur de laquelle j'ai déclaré une variable globale obs
, à l'intérieur d'une fonction et d'assigner une valeur.Si je veux accéder à une certaine autre fichier lua, il donne une erreur: "tentative d'appel obs
une valeur nulle, que dois-je faire pour pouvoir en mesure d'y accéder?
Ici est le mannequin le code
//A.lua
function X()
obs = splitText(lk,MAXLEN)
end
//B.lua
function Y()
for i=1, #obs do //error at this line
end
end
- A travailler si vous avez besoin de la déclaration sur le haut de B. lua, qui appelle l'A. lua. Et assurez-vous que vous appelez la fonction X() avant d'appeler la fonction Y().
- Oh, et il pourrait être possible, que splitText offre néant
- Oh, non non. splitText n'est pas la prestation NUL à tous. En fait, est-il un autre moyen de stocker de la valeur? Je ne peux pas exiger la déclaration de A. lua(quelque chose que je ne peux pas l'expliquer ici), mais cela ne sera possible qu'avec le genre de code que j'ai. J'ai juste besoin de trouver un moyen de stocker cette valeur quelque part qui peut être consulté dans B. lua
- Il est difficile de comprendre votre conception. Vous avez différents choix, dépend de votre conception. Vous pouvez appeler X directement à partir de B ou à l'intérieur de Y. c'est Peut-être mieux de retourner obs dans X, de sorte que vous pouvez appeler X dans Y et utiliser la valeur de retour. Vous pouvez également passer la fonction X comme argument de la fonction Y.
- Vous pouvez également écrire un fichier dans lequel vous stockez obs et le lire dans B, mais je pense que ce serait la pire façon 🙂
- Comment puis-je appeler X directement à partir de B quand je ne peux pas avoir de retour au sommet?
- Duh! La directive require (espère que vous vouliez dire qu'avec l'instruction return)... Est dofile d'accord? Vous n'avez pas "importer" quoi que ce soit? Mais comment appelez-vous X et Y? À partir d'un autre C. lua qui nécessite un B? Passer ensuite! Je suis un peu confus sur la façon dont vous appelez les fonctions. Sinon, il pourrait être possible que vous n'avez que le fichier de la solution de chance.
Vous devez vous connecter pour publier un commentaire.
Il ya quelques façons de le faire. Avec votre configuration actuelle, vous pourriez faire ceci:
un.lua
b.lua
La farce des choses dans la table globale est généralement une mauvaise idée même si, comme tout script n'importe où d'autre pourrait remplacer la valeur, zéro la variable, etc. une bien meilleure façon de l'omi serait d'avoir votre un.lua retour à ses fonctionnalités dans un tableau que vous pouvez capturer dans les dossiers qui le nécessitent. cela vous permettra de définir une fonction get de retour de la 'obs' variable attachée directement à votre une.lua' fonctionnalité dans son état actuel.
vous voulez probablement faire quelque chose comme ceci pour une meilleure portabilité (il est aussi beaucoup plus claire de ce qui les modules de définir les fonctionnalités de cette façon):
un.lua
b.lua
puisque vous avez mentionné que vous ne pouvez pas utiliser l'exigent, je vais supposer que vous êtes à travailler dans un autre cadre qui utilise une autre fonction pour charger des bibliothèques/fichiers. dans ce cas, vous aurez probablement à juste des trucs tout dans la table globale. peut-être quelque chose comme ceci:
un.lua
b.lua
Rappelez-vous que certains Lua programmes à l'intérieur d'autres programmes (Garry's Mod, World of Warcraft, Vera, Domoticz) utilise _ENV au lieu de _G pour en limiter la portée. Donc, les variables globales doit être:
au lieu de:
La raison pour laquelle cela se produit est parce que le développeur veut limiter le standard de la bibliothèque Lua pour éviter que l'utilisateur l'accès à des méthodes comme: os.exit().
Pour voir si _ENV est utilisé à la place de _G, de l'imprimer et si elle retourne un tableau au lieu de néant, c'est probablement utilisée. Vous pouvez également tester avec le fragment de code suivant:
Où l'un pour imprimer le vrai est celui que vous utilisez.