2016-11-01 3 views
1

Juliaに奇妙な問題があり、DataArrays.DataArrayを使用しています。ローカルスコープとDataArrays.DataArray

私は公式ドキュメントから(簡体字)の例を使用して私の問題を説明しようとします:

x = 1 
function bar() 
    x = 10 # local 
    println(x) # 10 
    return 1 
end 

bar(); 
println(x) # 1 

この関数は、xのローカル値を変更しますが、そのグローバル値を変更しません。

using DataFrames; 
x = @data([1 2 3 4 5 6 7 8 9 10]); 
function bar() 
    x[1,1] = 1000000 # local 
    println(x[1, 1]) # 1000000 
    return 1 
end 

bar(); 
println(x[1, 1]) # it should be 1, but it is 1000000 

あなたは、このような場合は理由を明確にしてください可能性があり、どのように私はジュリアが正常に動作させることができます:

それでは、以下、私が持っているとしましょうか?

答えて

5

2番目の例では、変数にインデックスを付けるので、グローバルスコープでインデックスを検索し、グローバルスコープ内にあればそれを突き止めます。すなわちx [1,1]が何かと等しくなるためには、xが既に存在していなければならない。

最初の例では、期待どおりにローカルスコープに新しい変数を作成しました。

それは意味がありますか? FYIこれはDataFramesタイプとは無関係で、通常の配列にも同じことが適用されます。

+0

申し訳ありませんが、私はそれを持っています。 xを引数として受け入れるようにbarを付けても、同じ問題が起きているので、まだ疑問が残っています。その場合、関数バーにはxのローカルバージョンが必要ですか?グローバルxにまだアクセスしているのはなぜですか? – merch

+1

ではなく、関数は引数を変更できます。ローカルバージョンを明示的に作成したい場合は、ローカル 'x = "何でも"の前にローカルを追加してください。 –

+0

よろしくお願いします。 – merch

関連する問題