【发布时间】:2016-08-08 01:43:38
【问题描述】:
我目前正在学习 elixir,我想知道这三个实现是否真的是一个选择问题,或者有一些与性能或其他事情相关的最佳实践,换句话说,有没有最好的?
我的第一个实现是第三个(...我知道),但如果我必须选择,我肯定会选择第二个。第一个对我来说似乎很奇怪,因为我定义了 3 次函数
谢谢!
@spec count(list) :: non_neg_integer
def count(l), do: count(l, 0)
defp count([], acc), do: acc
defp count([_ | tail], acc), do: count(tail, acc + 1)
@spec count(list) :: non_neg_integer
def count(l) do
case l do
[] -> 0
[_|tail] -> 1 + count(tail)
end
end
@spec count(list) :: non_neg_integer
def count(l) do
do_count(l, counter)
end
defp do_count(list, counter \\ 0) do
cond do
list == [] -> counter
true ->
counter = counter + 1
do_count(tl(list), counter)
end
end
【问题讨论】:
-
我非常想更改您问题的标题,但这似乎可能是编辑过度。请让您的问题的标题更具描述性。
-
很公平......你能给我你会使用的标题吗?
-
我想到的是“多功能头是解决这个问题的更好方法吗?”您现有的标题非常通用。
-
嗯,这不是我想说的......你怎么看:“这些不同的函数定义的优缺点是什么”
-
“这些不同的函数定义有什么优缺点?”对我来说听起来不错。
标签: elixir