2013-12-10 42 views
13

'da tanımlanmamışsa atama Yalnızca bir değişken tanımlanmamışsa (veya falsi) bir değişkene atanmak için basit Julia sözdizimi var mı? Ruby'nin x ||= NEW_VALUE gibi bir şeyi kastediyorum. x || x=NEW_VALUE'u denedim ancak bir hata attı. Kolay sözdizimini engelleme, bir değişken tanımlanmış olup olmadığını kontrol etmek için hangi işlevi kullanabilirim?Sadece Julia

cevap

24

isdefined işlevini kullanabilirsiniz: isdefined(:x) || (x = NEW_VALUE).

2

Bu küçük rahatsızlık ile başa çıkmak için bir makro hazırladım. Çoğaltma olarak O

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 

enterpolasyon bir örneği:

julia> w 
ERROR: UndefVarError: w not defined 

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

julia> w 
"start: end" 

Ancak, kapsamı hatırlamak (y kapsamında olduğu için döngü):

julia> y 
ERROR: UndefVarError: y not defined 

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

julia> y 
ERROR: UndefVarError: y not defined 

Let Çalışırsa, biliyorum. Merak ediyorum, çünkü makrolarla yaptığım ilk alıştırma.