在Erlang中,标记成功的返回值有一个好处(例如,如Erlang Programming Rules and Conventions所示),但标记失败值是否有好处?具体来说,file包中使用的标记样式是否有益,其中错误用error
原子标记?例如,file:open
在发生错误时返回{error, Reason}
,其中Reason
是更具描述性的原子,但是当您可以返回时,需要error
标记直接Reason
原子?我目前可以看到的唯一优势是标签将Reason
原子记录为错误,但我觉得错误原子是自我描述性的,并且必须通过" unbox"此函数的所有未来错误值。
答案 0 :(得分:6)
不只是file
模块用error
原子来标记错误;相反,这是一个非常常见的Erlang实践。好处是,任何想要在不打扰原因的情况下检查错误的代码都可以匹配{error, _Reason}
并采取适当的操作,而如果它要匹配Reason
本身 - 顺便说一下,并不总是一个原子 - 这种匹配会根据被调用的内容而变化很大,并且在代码中也很难看到。