什么时候Erlang函数应该返回ok?

Llo*_*ice 19 erlang

我经常看到Erlang函数返回ok,或者{ok, <some value>},或者{error, <some problem>}.

假设我的函数返回一个整数N.我的函数应该只返回N,还是{ok, N}

或者假设我的功能包括通话io:function("Yada yada").它应该返回ok还是什么都没有?

或者假设我正在制作唱片或有趣.我应该回来{ok, R}还是(ok, F}

谢谢,

LRP

Dav*_*don 26

这是一个风格问题,但做出合理的选择对于使代码更具可读性和可维护性还有很长的路要走.以下是基于我自己的偏好以及我在标准库中看到的一些想法:

  • 如果函数可以成功及可恢复的故障恢复的情况下,你可能想要的成功案例看起来像{ok, _}ok.很好的例子是:orddict:find/2application:start/1.我们这样做是因为这两种情况都可以在打电话时轻松模式匹配.
  • 如果函数只有一个成功案例有一个有意义的结果,那么就返回结果,因为没有必要增加额外的信息.事实上,如果你将结果包装在一个元组中,那么你就不能轻易地将调用链接在一起,例如,foo(bar(N))如果bar/1返回则可能无效{ok, _}.很好的例子是:lists:nth/2math:cos/1.
  • 如果函数只有一个没有有意义结果的成功案例,那么常见的习惯用语就是返回,ok或者true与函数中最后返回的值相反.很好的例子是:ets:delete/1io:format/1.

  • 我想做的另一个补充是,如果用户能够处理错误对你有意义,你应该只返回`{error,Reason}.如果它是一个不可恢复的错误,最好抛出异常. (5认同)

Ale*_*nov 5

假设我的函数返回一个整数N.我的函数应该只返回N,还是{ok,N}?

如果根本不存在错误,或者任何错误表示编程错误,N.如果可能有充分的理由失败,则返回{ok, N}({error, Reason}如果失败).

它应该还原还是什么都没有?

在Erlang,你什么都不能回报.如果你没有有意义的回报值,那就行了ok.