在使用 Julia 宏时,我似乎又回到了试错编程中,这也不例外。我正在尝试编写一个简单的宏来捕获表达式中的任何错误并在表达式失败时设置一个标志。这是一个宏,因为我希望在调用上下文中评估表达式(可能包括一个或多个赋值语句)。所以,像:
macro flag_errors(ex)
broken = false
esc(quote
try
$(ex)
catch
broken = true
end
end)
end
我已经尝试了各种嵌套esc
函数的方法,但是我还没有找到一种可以在调用环境中正确评估赋值的方法:
julia> @flag_errors a=2
2
julia> a
a not defined
julia> @flag_errors a=2+"X"
true
julia> a
a not defined
julia> broken
broken not defined
编写此宏的正确方法是什么?块是否try
导致问题?