模式匹配是首选还是惯用 Erlang 中的 case 语句?

Posted

技术标签:

【中文标题】模式匹配是首选还是惯用 Erlang 中的 case 语句?【英文标题】:Is pattern matching preferred or a case statement in idiomatic Erlang? 【发布时间】:2018-09-04 02:18:03 【问题描述】:

这段代码中哪一个是 Erlang 的首选方式,为什么?

sumOfMultiples(Multiples, 1) ->
  0;

sumOfMultiples(Multiples, N) ->
  cal_multiples(Multiples, lists:seq(1, N-1), 0).

sumOfMultiples(Multiples, N) ->
  case N of
    1 -> 0;
    cal_multiples(Multiples, lists:seq(1, N-1), 0)
  end

【问题讨论】:

【参考方案1】:

标题不太正确,因为case 模式匹配(和一个表达式,而不是一个语句)。

多子句定义可能会稍有偏好,因为当您想要匹配多个参数时使用它会更好,但两者都是完全惯用的。

【讨论】:

以上是关于模式匹配是首选还是惯用 Erlang 中的 case 语句?的主要内容,如果未能解决你的问题,请参考以下文章

什么是Erlang中的模式匹配

为啥 Erlang 中的模式匹配记录会抛出错误

与 Erlang 中的映射模式匹配时的非法表达式

Erlang中的模式不匹配

Erlang 映射中的模式匹配键

Haskell 和 Erlang 中的模式匹配