Подтвердить что ты не робот

Присвоить только если это еще не определено в Julia

Есть ли простой синтаксис Julia для назначения переменной только в том случае, если она undefined (или фальшивка)? Я имею в виду что-то вроде Ruby x ||= NEW_VALUE. Я пробовал x || x=NEW_VALUE, но он выдает ошибку. Запрет простого синтаксиса, какую функцию я могу использовать, чтобы проверить, определена ли переменная?

4b9b3361

Ответ 1

Вы можете использовать функцию 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 находится в области 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

Сообщите мне, если это сработает. Мне любопытно, потому что это мое первое упражнение с макросами.