以下のJuliaコードを実行すると、エラーが発生しました:UndefVarError: globalValue not defined
。
GlobalValueはグローバル変数だと思いましたが、そうではありません。したがって、forループ内に「global globalValue」というコマンドを追加すると、コードが機能します。だから、誰かがそれを見て私に何が起こったのか教えてくれませんか?前もって感謝します!
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
スコープ規則が変更されたJulia> = 0.7にいるようです。
簡単に言えば、forループなどのローカルスコープでは、グローバル変数は読み取り専用で継承され、書き込み専用ではありません。それを回避する方法は2つあります。
global
を置きます(自分で考えたもの)let ... end
ブロックのような「グローバルローカルスコープ」ですべてをラップします(globalValue
は実際にはグローバル変数ではありません)あなたの場合、2番目のオプションは次のようになります
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
あなたはここでより多くの情報を見つけることができます:
私はこれが少し迷惑であると思いますが、変更が行われた理由はいくつかあります。また、onはとにかくグローバルを変更しないようにする必要があります。ここでマニュアルを引用させてください(上のリンクを参照):
グローバル変数の値を変更しないことは、プログラミングのベストプラクティスであると多くの人が考えています。この理由の1つは、他のモジュールのグローバル変数の状態をリモートで変更すると、プログラムのローカル動作が推測しにくくなるため、注意して行う必要があるためです。これが、ローカルスコープを導入するスコープブロックがグローバル変数を変更する意図を宣言するためにglobalキーワードを必要とする理由です。