我想问一些Julia异常机制的问题


#1

今天学习《函数式编程思想》5.5函数式结构 那里了解到函数式语言处理异常时,可以在不中断程序流程的情况下可以把异常进行一些处理,比如把异常处理成

  1. 初始版 map<string,object> 这样根据string键判断是否出现错误,若正确,放回map<string,result>。否则返回map<string,Exception>

2.进阶版 map<left,right> 当没有异常发生时,left为返回结果,right=null.。发生异常时相反

这些东西我好像在Rust语言里看到过,这个好像叫
Result<T,E>{ Ok<T>, Err<E>, }

疑问:Julia好像没有现成的结构来这样函数式处理异常,我也不知道他需不需要像Rust那样把错误分层处理。
疑问: 他的异常处理结构虽然和Java很像,try catch finally,但在catch那块判断错误类型时像JavaScript,通过isa判断错误类型。(其实我不怎么看文档,我也不知道Julia有没有推出像Python那样判断错误类型的catch语法机制)

ps:其实我平时对错误接触很少,都是在REPL打字,或是在脚本环境里打代码,然后让编译器检查有没有错误,慢慢改,所以平时不怎么用错误处理

我想我对这门语言的定位还不是很熟悉吧,大概是我的问题


#2

julia下比较常见的异常处理大概是这样子的:

julia> function foo()
           try
               print(x)
           catch x
               if x isa UndefVarError
                   print("gotcha")
               else
                   rethrow(x)
               end
           end
       end
foo (generic function with 1 method)

julia> foo()
gotcha