【问题标题】:Should I be pattern matching every return value?我应该模式匹配每个返回值吗?
【发布时间】:2010-12-29 16:35:38
【问题描述】:

当我在 Erlang 中编程时,我是否应该通过模式匹配验证函数调用的所有返回值是否成功,即使我不打算使用返回值?到目前为止,我见过的大多数 Erlang API 都不会在错误时抛出异常(但会返回 {error, Error} 之类的东西),所以我必须验证返回值是吗?我真的不需要担心的任何例外情况?

【问题讨论】:

    标签: erlang pattern-matching


    【解决方案1】:

    当出现问题时尽早崩溃是一种很好的编程风格。之后您执行的任何操作都将在系统处于未知状态时完成。

    除非您打算处理错误值并对其执行某些操作,否则您为成功案例编写代码。就像下面这个悲伤的小循环:

    life() ->
      ok = work(),
      ok = rest(),
      life().
    

    【讨论】:

    • 是的,这就是我的想法。问题是我正在使用的第 3 方 API 之一在成功时不能很好地返回 ok。保存文档后,它会返回保存的文档本身。我返回 SomeComplexDoc 而不是 {ok, SomeComplexDoc}。
    • @Jeremy,您可以只保存文档,然后在下一行进行匹配。 Doc = my_api_call(), ok = is_valid_doc(Doc).
    • 是的,这是个好主意。我正在做类似的事情。 SomeComplexDoc 要么作为某个大结构返回,要么作为指示错误的原子返回。我可以做类似false = is_atom(Doc) 的事情,如果保存失败,这应该会失败。
    猜你喜欢
    • 2015-01-20
    • 1970-01-01
    • 2011-05-30
    • 2017-05-25
    • 1970-01-01
    • 2019-09-03
    • 2010-10-31
    • 2022-11-30
    • 1970-01-01
    相关资源
    最近更新 更多