2013-12-10 8 views
13

定義されていない(または偽の)変数に割り当てるための簡単なJulia構文はありますか?私はRubyの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は、の範囲にあるforループ):

julia> y 
ERROR: UndefVarError: y not defined 

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

julia> y 
ERROR: UndefVarError: y not defined 

私はそれが動作するかどうか知っている。私はマクロで私の最初の練習なので、私は興味があります。

関連する問題