2016-11-01 2 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가 이미 존재해야합니다.

첫 번째 예에서는 예상대로 로컬 범위에 새 변수를 만들었습니다.

의미가 있습니까? 참고 이것은 DataFrames 유형과 관련이 없으며 일반 배열에도 동일하게 적용됩니다.

+0

좋아, 알아. x를 인수로 받아들이도록 술집에 알려 주더라도 똑같은 문제가 있기 때문에 여전히 의문입니다. 이 경우, 함수 막대는 x의 로컬 버전을 가져야합니다. 그렇지 않습니까? 글로벌 x에 여전히 액세스하는 이유는 무엇입니까? – merch

+1

아니요, 함수는 인수를 변경할 수 있습니다. 명시 적으로 로컬 버전을 만들고 싶다면 'local x = "what any"보다 먼저 로컬을 추가하십시오. –

+0

그래, 도와 줘서 고마워! – merch