是否有简单的Julia语法,只有在未定义(或假)的情况下才能分配给变量?我的意思是Ruby的x ||= NEW_VALUE
。我试过了x || x=NEW_VALUE
但是却抛出了一个错误。除非简单的语法,我可以使用什么函数来检查是否定义了变量?
答案 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
让我知道它是否有效。我很好奇,因为这是我第一次使用宏。