Julia: Variable nicht definiert

8

Das Verhalten des Variablenbereichs scheint ziemlich seltsam zu sein. Der Codeblock

%Vor%

funktioniert sehr gut während

%Vor%

gibt die Ausnahme "tp nicht definiert". Was ist los?

    
warsaga 18.07.2014, 16:46
quelle

1 Antwort

11

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 Variable x ein, wenn x 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:

%Vor%

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!

    
Matt B. 18.07.2014, 20:22
quelle