2013-12-10 81 views
13

只有在未定義(或虛假)的情況下才賦予變量,是否有簡單的Julia語法?我的意思是像Ruby的x ||= NEW_VALUE。我嘗試過x || x=NEW_VALUE,但它會引發錯誤。除了簡單的語法,我可以使用什麼函數來檢查變量是否被定義?只有在Julia中沒有定義的情況下才能分配

回答

24

您可以使用isdefined功能:isdefined(:x) || (x = NEW_VALUE)

2

我準備了一個宏來處理這個小小的不便。

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

然後在REPL:

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 

讓我知道它是否有效。我很好奇,因爲這是我對宏的第一次練習。

相關問題