仅在Julia中尚未定义时分配

时间:2013-12-10 00:26:41

标签: julia

是否有简单的Julia语法,只有在未定义(或假)的情况下才能分配给变量?我的意思是Ruby的x ||= NEW_VALUE。我试过了x || x=NEW_VALUE但是却抛出了一个错误。除非简单的语法,我可以使用什么函数来检查是否定义了变量?

2 个答案:

答案 0 :(得分:29)

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

答案 1 :(得分:4)

我已准备好一个宏来处理这一小小的不便。

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在for-loop的范围内):

julia> y
ERROR: UndefVarError: y not defined

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

julia> y
ERROR: UndefVarError: y not defined

让我知道它是否有效。我很好奇,因为这是我第一次使用宏。