Myriad Forum « Variables globales et Run() »
 Welcome, Guest.
 You can read all messages, but to be able to post,
 please Login or Register.
Apr 10th, 2020, 6:14am 
   Myriad Forum
   MyrScript Language
(Moderator: Forum Administrator)
   Variables globales et Run()
« Previous topic | Next topic »
Pages: 1  Reply | Notify of replies | Print
   Author  Topic: Variables globales et Run()  (Read 97 times)
az
Board Full Member
***





   
WWW |

Posts: 211
Variables globales et Run()  
« on: Dec 20th, 2019, 11:08am »
Quote | Modify

Bonjour,
 
Pour contourner l'impossibilité de passer des paramètres avec Run(), j'essaie de renseigner des variables globales dans l'appelant et de les lire dans l'appelé.
 
Je tombe cependant sur un bug (?) que je ne comprends pas :
1) Dans certains cas, et je ne vois pas trop ce qui déclenche un comportement plutôt que l'autre, une partie de mon script appelé est exécuté deux fois, après l'impression dans la log d'une ligne "nil", alors que je n'ai pas demandé d'impression.
2) Dans d'autres cas, au début de l'appelé la variable globale est reconnue, peut être testée et imprimée, mais j'ai néanmoins un message d'erreur dans la log qui me dit qu'elle est "nil".
 
J'ai donc la vague intuition qu'il faudrait que je "libère" ou "déclare" la variable globale, ou que je "termine" ou "libère" le script appelé, mais je ne vois pas comment... Rajouter un "return true" ne change rien...
 
Exemple de comportement 1 :
 
Script appelant :
Code:
globale="oui"
print("appelant après déclaration à oui  : "..globale)
Run("appelé.mys")
print("appelant après appel  : "..globale)

Script appelé :  
Code:
if(globale=="oui") then
      print("globale est oui")
end
print(globale)
globale="schtroumpf"
if globale=="schtroumpf" then
      print("globale est schtroumpf")
end
print("fin appelé : "..globale)

log :
appelant après déclaration à oui:oui
globale est oui
oui
globale est schtroumpf
fin appelé:schtroumpf
nil
globale est schtroumpf
fin appelé:schtroumpf
appelant après appel:schtroumpf
Processing time 0.1seconds.

 
Exemple de comportement 2 :
 
J'ai ajouté un print au début de l'appelé :
 
Code:
print("début appelé : "..globale)
if(globale=="oui") then
      print("globale est oui")
end
print(globale)
globale="schtroumpf"
if globale=="schtroumpf" then
      print("globale est schtroumpf")
end
print("fin appelé : "..globale)

log :
appelant après déclaration à oui:oui
début appelé:oui
globale est oui
oui
globale est schtroumpf
fin appelé:schtroumpf
error:attempt to concat global `globale' (a nil value)
<string "appelé.mys":line3>
appelant après appel:schtroumpf
Processing time 0.1seconds.
« Last Edit: Dec 20th, 2019, 11:09am by az » offline
Geo
Board Master
*****





   


Gender: male
Posts: 2133
Re: Variables globales et Run()  
« Reply #1 on: Dec 20th, 2019, 10:57pm »
Quote | Modify

Bonsoir
 
Pour le script exécuté deux fois, oui, je l'ai évoqué dans l'autre réponse avant de lire cette question. Autant que je me souvienne en version i c'était la cas pour des (pas tous) scripts placés dans Includes. En version j ça ne se produit que si le script est placé dans le dossier courant. Il y a un script qui met ça en évidence.
Pour les variables globales, j'ai utilisé le principe des constantes MyrScript : un module  
Include "Globaux"  
appelé en début de script principal, jamais dans les sous programmes sinon les valeurs sont rééinitialisées, exemple du contenu :
CODE_RETOUR = nil
PARAM_SP_CAR_SPECIAUX_E = ""
PARAM_SP_CAR_SPECIAUX_S = ""
GLOBAL_PARTITION = nil
GLOBAL_PUPITRE = nil
 
Pour "libérer" votre script, essayez avec Exit().
 
Je compatis avec vous, on y passe des heures sans beaucoup de résultats parfois.
offline
Pages: 1  Reply | Notify of replies | Print

« Previous topic | Next topic »

« Myriad Forum » Powered by YaBB 1 Gold - SP 1.1!
YaBB © 2000-2002,
Xnull. All Rights Reserved.

Top of page
Legal information Last update:  (c) Myriad