仅当变量未定义(或虚假)时,是否有简单的 Julia 语法分配给变量?我的意思是像 Ruby 的x ||= NEW_VALUE
. 我已经尝试过x || x=NEW_VALUE
,但它会引发错误。除非语法简单,否则我可以使用什么函数来检查变量是否已定义?
问问题
4088 次
2 回答
30
您可以使用@isdefined
宏:(@isdefined x) || (x = NEW_VALUE)
。
于 2013-12-10T01:05:07.920 回答
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"
但是,请记住范围(y
在 for 循环的范围内):
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 回答