Julia 中的 Try-Catch 宏

Try-Catch Macro in Julia

我有以下功能

foo(x) = x + 1
bar(x) = x * 2

我在包装函数中使用它们(不确定这是否重要)。

function baz(x)
    d = Dict{Symbol,Any}()
    d[:foo] = foo(x)
    d[:bar] = bar(x)
    return d
end

问题是 foo()bar() 可能会失败,在这种情况下我希望代码继续 运行。但是,引入 try catch 语句会使代码非常混乱。那么,是否有以下两种解决方案之一可以使这更容易?

梦想解决方案

一个我可以写在 d[:foo] = foo(x) 前面的宏,在失败的情况下会写一个默认值 do d[:foo].

也是一个解决方案

如果代码失败,将继续的宏。

因此,我设法做到了以下几点。但是,我不知道这是否是好的风格。

macro tc(ex)
    quote
        try
            $(esc(ex))
        catch
            missing
        end
    end
end

@tc foo(1)
1

@tc foo("a")
missing

注意 $(esc(ex))。这个很重要。如果表达式未转义,则宏将在全局范围内按预期工作,但不会在函数内部(如问题中所示)。如果有人能清楚地解释为什么会这样,请添加评论。