2013-12-10 3 views
13

정의되지 않은 (또는 위증 한) 경우에만 변수에 할당하는 간단한 Julia 구문이 있습니까? 루비의 x ||= NEW_VALUE과 같은 의미입니다. x || x=NEW_VALUE을 시도했지만 오류가 발생합니다. 쉬운 구문을 제외하고, 변수가 정의되어 있는지 확인하기 위해 어떤 함수를 사용할 수 있습니까?Julia에 아직 정의되지 않은 경우에만 할당

답변

24

isdefined 기능을 사용할 수 있습니다 : isdefined(:x) || (x = NEW_VALUE).

2

불편을 드리기 위해 매크로를 준비했습니다. REPL에이어서

macro ifund(exp) 
    local e = :($exp) 
    isdefined(e.args[1]) ? :($(e.args[1])) : :($(esc(exp)))  
end 

:

julia> z 
ERROR: UndefVarError: z not defined 

julia> @ifund z=1 
1 

julia> z 
1 

julia> z=10 
10 

julia> @ifund z=2 
10 

julia> z 
10 

보간의 예 :

julia> w 
ERROR: UndefVarError: w not defined 

julia> w = "$(@ifund w="start:") end" 
"start: end" 

julia> w 
"start: end" 

그러나 범위를 기억 (y이 범위에 대한 루프)

julia> y 
ERROR: UndefVarError: y not defined 

julia> for i=1:10 y = "$(@ifund y="") $i" end 

julia> y 
ERROR: UndefVarError: y not defined 

그것이 작동하는지 나에게 안다. 나는 매크로가있는 나의 첫번째 운동이기 때문에 나는 호기심이 많다.

관련 문제