Есть ли простой синтаксис Julia для назначения переменной только в том случае, если она undefined (или фальшивка)? Я имею в виду что-то вроде Ruby x ||= NEW_VALUE
. Я пробовал x || x=NEW_VALUE
, но он выдает ошибку. Запрет простого синтаксиса, какую функцию я могу использовать, чтобы проверить, определена ли переменная?
Присвоить только если это еще не определено в Julia
Ответ 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
Сообщите мне, если это сработает. Мне любопытно, потому что это мое первое упражнение с макросами.