Julia 仅当尚未在中定义时才指定

Julia 仅当尚未在中定义时才指定,julia,Julia,是否只有在变量未定义(或falsy)时才有简单的Julia语法用于分配给变量?我的意思是Ruby的x | |=新的_值。我尝试了x | | x=NEW_值,但它抛出了一个错误。如果没有简单的语法,我可以使用什么函数来检查变量是否已定义?您可以使用宏:(@isdefined x)| |(x=NEW_VALUE)我准备了一个宏来处理这一小麻烦 macro ifund(exp) local e = :($exp) isdefined(Main, e.args[1]) ? :($(e.a

是否只有在变量未定义(或falsy)时才有简单的Julia语法用于分配给变量?我的意思是Ruby的
x | |=新的_值
。我尝试了
x | | x=NEW_值
,但它抛出了一个错误。如果没有简单的语法,我可以使用什么函数来检查变量是否已定义?

您可以使用宏:
(@isdefined x)| |(x=NEW_VALUE)

我准备了一个宏来处理这一小麻烦

macro ifund(exp)
    local e = :($exp)
    isdefined(Main, 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 v1.0改编完成

1.0的更新:将
isdefined(e.args[1])
替换为
isdefined(Main,e.args[1])
@fredcallaway,Done.Stefan,既然
@isdefined x
是一件事,您可能需要更新它
julia> y
ERROR: UndefVarError: y not defined

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

julia> y
ERROR: UndefVarError: y not defined