2013-12-10 53 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 

让我知道它是否有效。我很好奇,因为这是我对宏的第一次练习。

相关问题