2016-11-01 27 views
1

我在使用DataArrays.DataArray時遇到了一個與Julia有關的奇怪問題。本地作用域和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

在第二個示例中,您將索引到一個變量中,因此它將在全局範圍內搜索它,並在它存在時進行變異。即對於x [1,1]等於某事物,則x必須已經存在。

在第一個示例中,您已按預期在本地作用域中創建了一個新變量。

這有道理嗎?僅供參考,這與DataFrame類型無關,同樣適用於普通數組。

+0

好的,我明白了。即使我讓酒吧接受x作爲論點,我仍然有疑問,因爲我有同樣的問題。在這種情況下,功能欄應該有一個本地版本的x,不是嗎?爲什麼它仍然訪問全局x? – merch

+1

nope,函數可以改變它們的參數。如果你想明確地創建一個本地版本,然後添加本地之前,即'本地x =「任何」' –

+0

好吧,謝謝你的幫助! – merch