Erlang - **异常错误:右侧值不匹配

Posted

技术标签:

【中文标题】Erlang - **异常错误:右侧值不匹配【英文标题】:Erlang - ** exception error: no match of right hand side value 【发布时间】:2015-12-06 21:40:41 【问题描述】:

我对 json 格式字符串的模式匹配有疑问。 在这里我添加了一个简短的版本(只是将长 json 字符串更改为 "\"jsondata\"" 所以我有这个成功的模式匹配:

 > MyData2=ok,"HTTP/1.1",200,"OK",
         ["connection","Keep-Alive",
          "date","Thu, 10 Sep 2015 12:03:49 GMT",
          "server","Apache/2.4.7 (Ubuntu)",
          "vary","X-Auth-Token",
          "content-length","1171",
          "content-type","application/json",
          "x-openstack-request-id",
           "req-31b4efc1-2af4-4130-b7a8-01d94b456096",
          "keep-alive","timeout=5, max=100"],
         "\"jsondata\"".

之后我运行以下命令:

> ok,"HTTP/1.1",ReturnCode, State,B,J=MyData2.

不幸的是我明白了 如果我将"\"jsondata\"" 更改为"jsondata",则最后一个模式匹配工作正常 我不知道如何提取 json 并在 J 中获取 "\"jsondata\"" 我会接受任何想法 ** 异常错误:右侧值不匹配

【问题讨论】:

您似乎收到此错误,因为MyData2 已绑定在外壳中。有关该问题的更多信息,请参阅this answer。 @legoscia - 不,这是一个新的,没有绑定 变量ReturnCodeStateBJ 是否已经绑定?这会导致类似的问题,因为它们将被左侧的绑定值替换。 如果我复制粘贴所有内容并在新的 shell 中执行它,匹配就完美了。它必须是一个变量绑定问题,就像我刚刚发布的那样...... 与@maze-le 的结果相同:将所有内容复制并粘贴到新的外壳中,它工作正常。另外,请考虑一下:获得错误消息“右侧值不匹配”的唯一方法是左侧的某些内容已经具有与右侧不匹配的值.. . 【参考方案1】:

您的模式匹配操作运行良好。我认为问题在于,ReturnCodeStateBJ 变量之一已经绑定。

假设变量J 已经绑定到一个值,而其他变量没有。根据这个值,模式匹配操作

ok,"HTTP/1.1",ReturnCode, State,B,J = MyData2.

成功与否。

案例1J已经绑定到"\"jsondata\""

您的模式匹配将成功,并且将根据MyData2 的模式设置未绑定变量(ReturnCodeStateB)的值。

案例2J已经绑定到"jsondata"

右侧的 J 变量与左侧的 MyData2 模式不匹配。因此执行失败并出现异常。

如果您忘记使用 f(Variable) 清除变量,shell 也会发生这种情况。

【讨论】:

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

如何解决“Erlang 异常错误”

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

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

学习Java(10)之异常处理

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

Erlang:为什么这会以'badarith'异常失败?