右侧值不匹配的 Erlang 异常错误

Posted

技术标签:

【中文标题】右侧值不匹配的 Erlang 异常错误【英文标题】:Erlang exception error for no match of right hand side value 【发布时间】:2019-02-27 07:17:36 【问题描述】:

我有这段代码应该在列表中打印数字 1 到 N-1,但这里的 I 不会附加到列表中。

enum(N,[],N) -> [];
enum(N,L,I) ->
  io:format("current number: ~w~n", [I]),
  L = L ++ I,
enum(N,[],I+1).

enumFunc(N) -> enum(N,[],1).

当我运行 sample:enumFunc(100). 时,它返回 exception error: no match of right hand side value [1]

请帮我解决这个问题。谢谢。

【问题讨论】:

【参考方案1】:

Erlang 是一种单一的赋值语言。这意味着如果一个值已经分配给L,您就不能给L 分配一个新值。当您尝试通过L = L ++ I“分配”一个新值时,您实际上是在执行 匹配 操作。您看到no match of right hand side value [1] 错误的原因是因为L 不等于L ++ I,因为L 已经分配了[1] 的值并且与[1,2] 不匹配

enum(N,L,N) -> L;
enum(N,L,I) ->
  io:format("current number: ~w~n", [I]),
  L0 = L ++ [I],
  enum(N,L0,I+1).

enumFunc(N) -> enum(N,[],1).

【讨论】:

它返回了一个Warning: the result of the expression is ignored 尝试将_L1 = L ++ I 更改为_ = L ++ I 没有更多错误,但它仍然没有将任何内容附加到列表中。 我已经编辑了我的帖子,以展示如何添加到列表中。 工作就像一个魅力。非常感谢!

以上是关于右侧值不匹配的 Erlang 异常错误的主要内容,如果未能解决你的问题,请参考以下文章

如何解决“Erlang 异常错误”

Erlang, register/2: 异常错误错误参数

Erlang中除以零的精确异常类型

在 laravel 5.5 的验证 csrf 令牌中没有收到错误令牌不匹配异常

异常处理

带有消息“SQLSTATE [22007]”的未捕获异常“PDOException”:日期时间格式无效:1366 字符串值不正确