15

変数が未定義 (または偽) の場合にのみ変数に代入するための単純な Julia 構文はありますか? Rubyの のようなものを意味しますx ||= NEW_VALUE。試してみx || x=NEW_VALUEましたが、エラーがスローされます。簡単な構文がなければ、変数が定義されているかどうかを確認するためにどの関数を使用できますか?

4

2 に答える 2

4

そんなちょっとした不便を解消するマクロを用意しました。

macro ifund(exp)
    local e = :($exp)
    isdefined(Main, 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"

ただし、スコープを覚えておいてください(yforループのスコープ内にあります):

julia> y
ERROR: UndefVarError: y not defined

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

julia> y
ERROR: UndefVarError: y not defined

それが機能するかどうか教えてください。マクロを使った初めての演習なので、興味があります。

編集済み: Julia v1.0 の適応が完了しました。

于 2015-08-14T14:23:09.137 に答える