Pattern Match In Ruby

阅读更多
最近看了一些Erlang,模式匹配是个好东西,简单的sum函数:

sum([]) -> 0;
sum([First|Rest]) -> First + sum(Rest).


突然想起来,其实Ruby里面也可以用模式匹配:

def sum(list)
  return 0 if list.empty?
  first, *rest = *list
  return first + sum(rest)
end


尾递归版本:

def sum(list)
  sum_acc(list, 0)
end

def sum_acc(list, s)
  return s if list.empty?
  first, *rest = *list
  return sum_acc(rest, first + s)
end


Pattern Match In Ruby

你可能感兴趣的:(erlang,Pattern,Match,模式匹配,递归,尾递归)