简而言之,为什么return
在Elixir和某些(大多数?全部?)功能语言中没有声明?
为了使它更长一点,我遇到了这样的情况:在Java,Groovy,C,Ruby中……我会写一些类似的东西
def func (some, parameters) {
# say some error
if(condition 1) {
return -1
}
# execute some function and return from here the result
if(condition 2) {
return process1(params)
}
# execute 'default' behavior when no condition matches and return result
process2(params)
}
当然,这可以写为nested,if
但是如果条件列表很长,则代码将变得不可读。
我在Elixir中阅读了关于Return语句问题的答案:它们清楚地说明了如何实现这种模式,但没有解释没有这种原因的原因return
。
我相信拥有return
会打破某些FP概念,但是我想知道哪个以及为什么。
因为还有其他方法可以完成类似Elixir的相同操作。
多功能头与您正在做的事情基本相同:
defp merge_sweep(a, [], _) when is_list(a), do: a
defp merge_sweep([], b, _) when is_list(b), do: b
defp merge_sweep([a|as], [b|bs], cmp) do
if cmp.(a, b) do
[a|merge_sweep(as, [b|bs], cmp)]
else
[b|merge_sweep([a|as], bs, cmp)]
end
end
而且由于函数式编程中的函数没有任何副作用(暂时忽略:ets
),所以为什么必须return
到处编写?您总是想在每个分支中返回某些内容,因此您最好总是总是在每个分支中返回最后一个表达式。
我defer
刚开始时就在Elixir中询问Golang的声明,因为我来自Go。只是每种语言都有不同的处理方式。用Python编写类似C的代码看起来很奇怪和陌生。
真正的答案可能是“因为Erlang没有”。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句