Lorsque j'ai exécuté le code Julia ci-dessous, une erreur s'est produite: UndefVarError: globalValue not defined
.
Je pensais que le globalValue est une variable globale, mais ce n'est pas le cas. Ainsi, si j'ajoute la commande "global globalValue" à l'intérieur de la boucle for, mon code fonctionnera. Alors, quelqu'un pourrait-il y jeter un coup d'œil pour me faire savoir ce qui s'est passé? Merci d'avance!
globalValue = 1.0;
tempValue = 0.1;
for ii = 1:10
# global globalValue; if I add this command, my code will work
tempValue = 5.0; ## I have a function to update "tempValue"
if globalValue < tempValue
globalValue = tempValue;
end
end
Il semble que vous soyez sur Julia> = 0,7, où les règles de portée ont changé.
Pour faire court, dans une portée locale, comme votre boucle for, les variables globales ne sont héritées que pour la lecture mais pas pour l'écriture. Il y a deux façons de contourner cela:
global
explicite devant le devoir (ce que vous avez compris vous-même)let ... end
block (globalValue
n'est plus vraiment une variable globale)Dans votre cas, la deuxième option ressemblerait à
let
globalValue = 1.0;
tempValue = 0.1;
for ii = 1:10
tempValue = 5.0;## I have a function to update "tempValue"
if globalValue < tempValue
globalValue = tempValue;
end
end
end
Vous pouvez trouver plus d'informations ici:
Bien que cela me dérange un peu, il y a de bonnes raisons pour lesquelles le changement a été effectué. De plus, on devrait essayer de toute façon d'éviter de changer les globaux. Permettez-moi de citer le manuel ici (voir le lien ci-dessus):
Éviter de changer la valeur des variables globales est considéré par beaucoup comme une meilleure pratique de programmation. Une des raisons à cela est que le changement à distance de l'état des variables globales dans d'autres modules doit être fait avec soin car cela rend difficile le raisonnement du comportement local du programme. C'est pourquoi les blocs de portée qui introduisent la portée locale nécessitent que le mot clé global déclare l'intention de modifier une variable globale.