[英]When should an Erlang function return ok?
我经常看到Erlang函数返回ok
,或者{ok, <some value>}
或{error, <some problem>}
。
假设我的函数返回一个整数N.我的函数应该只返回N,还是{ok, N}
?
或者假设我的功能包括调用io:function("Yada yada")
。 它应该ok
还是什么都没有?
或者假设我正在制作唱片或有趣。 我应该退回{ok, R}
还是(ok, F}
?
谢谢,
LRP
这是一个风格问题,但做出合理的选择对于使代码更具可读性和可维护性还有很长的路要走。 以下是基于我自己的偏好以及我在标准库中看到的一些想法:
{ok, _}
或ok
。 很好的例子是: orddict:find/2
和application:start/1
。 我们这样做是因为这两种情况都可以在打电话时轻松模式匹配。 bar/1
返回{ok, _}
,则foo(bar(N))
可能无效。 很好的例子是: lists:nth/2
和math:cos/1
。 ok
或true
,而不是函数中最后返回的值。 很好的例子是: ets:delete/1
和io:format/1
。 假设我的函数返回一个整数N.我的函数应该只返回N,还是{ok,N}?
如果根本不存在错误,或者任何错误表示编程错误,则为N
如果可能有理由失败,请返回{ok, N}
(以及{error, Reason}
以防失败)。
它应该还原还是什么都没有?
在Erlang,你什么都不能回报。 如果您没有有意义的返回值,那么ok
就可以了。
这是我在很多时候发现自己的难题。 拇指的规则(至少我的拇指)是,如果一个函数主要用于其他函数(更高阶函数,如map(),filter()等...)或者该函数被设计为“纯粹”功能性(没有副作用),然后我宁愿不返回{ok,_}并简单地返回结果。 在这种情况下的错误必须是由于某些逻辑/算法错误应该被修复,并且该函数的客户端应该知道任何这样的错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.