Dies ist aufgrund der Art und Weise, wie Variablen implizit als lokal oder global definiert werden, schwierig, und die Tatsache, dass Definitionen später in einer Funktion das Scoping in der gesamten Funktion beeinflussen können.
Im ersten Fall ist tp
standardmäßig eine globale Variable und funktioniert wie erwartet. Im zweiten Fall weisen Sie jedoch tp
zu. Dies wird im Abschnitt Geltungsbereich der Variablen des Handbuchs erwähnt:
"Eine Zuweisung
x = y
führt nur dann eine neue lokale Variablex
ein, wennx
weder als global deklariert noch durch einen umschließenden Bereich vor oder nach der aktuellen Codezeile als lokal deklariert wird. "
Wenn Sie also tp
zuweisen, haben Sie es implizit als lokale Variable deklariert! Es wird nun die Definition Ihres globalen ... Schattens sein, außer dass Sie zuerst versuchen, darauf zuzugreifen. Die Lösung ist einfach: Deklarieren Sie explizit alle Variablen als global, wenn Sie ihnen zuweisen möchten:
Das Verhalten hier ist fein nuanciert, aber es ist sehr konsistent. Ich weiß, dass ich einige Male durch diesen Teil des Handbuchs gelesen habe, bevor ich endlich verstanden habe, wie das funktioniert. Wenn Sie eine bessere Möglichkeit finden, es zu beschreiben, sagen Sie bitte etwas!
Tags und Links variables global-variables julia-lang