【发布时间】:2018-04-03 19:01:30
【问题描述】:
有人问过类似的问题,但问的不是完全相同。
我正在尝试安全地解码 base64 二进制文件,但输入可能不是二进制文件,甚至不是 base64 编码的。
Erlang 说让它崩溃并处理它——如果我要这样做,最有效的方法是什么。在这个系统中,效率非常重要。
我知道要避免 try/catch,因为它会构建完整的堆栈跟踪——但是,catch 关键字对于这种情况是否合理? catch 关键字是否更快/更有效?
在诸如
之类的函数中safe_decode(Binary) ->
case catch base64:decode(Binary) of
<<Result/binary>> -> {ok, Result};
{'EXIT', _} -> {not_base64, Binary}
end.
这真的比 try catch 更有效吗?如何在效率很重要的系统中最好地处理这种情况,即涉及构建堆栈跟踪和/或需要比快乐路径更多的处理需要尽可能高效地处理的崩溃。
我只是在学习 erlang,所以也许答案就在眼前。
【问题讨论】:
标签: performance exception erlang runtime-error processing-efficiency