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 - 不,这是一个新的,没有绑定
变量ReturnCode
、State
、B
或J
是否已经绑定?这会导致类似的问题,因为它们将被左侧的绑定值替换。
如果我复制粘贴所有内容并在新的 shell 中执行它,匹配就完美了。它必须是一个变量绑定问题,就像我刚刚发布的那样......
与@maze-le 的结果相同:将所有内容复制并粘贴到新的外壳中,它工作正常。另外,请考虑一下:获得错误消息“右侧值不匹配”的唯一方法是左侧的某些内容已经具有与右侧不匹配的值.. .
【参考方案1】:
您的模式匹配操作运行良好。我认为问题在于,ReturnCode
、State
、B
或 J
变量之一已经绑定。
假设变量J
已经绑定到一个值,而其他变量没有。根据这个值,模式匹配操作
ok,"HTTP/1.1",ReturnCode, State,B,J = MyData2.
成功与否。
案例1:J
已经绑定到"\"jsondata\""
您的模式匹配将成功,并且将根据MyData2
的模式设置未绑定变量(ReturnCode
、State
和B
)的值。
案例2:J
已经绑定到"jsondata"
右侧的 J
变量与左侧的 MyData2
模式不匹配。因此执行失败并出现异常。
如果您忘记使用 f(Variable)
清除变量,shell 也会发生这种情况。
【讨论】:
以上是关于Erlang - **异常错误:右侧值不匹配的主要内容,如果未能解决你的问题,请参考以下文章
带有消息“SQLSTATE [22007]”的未捕获异常“PDOException”:日期时间格式无效:1366 字符串值不正确