右侧值不匹配的 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 异常错误的主要内容,如果未能解决你的问题,请参考以下文章
在 laravel 5.5 的验证 csrf 令牌中没有收到错误令牌不匹配异常
带有消息“SQLSTATE [22007]”的未捕获异常“PDOException”:日期时间格式无效:1366 字符串值不正确