Erlang - ** exception error: no match of right hand side value

Erlang - ** exception error: no match of right hand side value

我对 json 格式化字符串的模式匹配有问题。 在这里我添加了一个简短的版本(只是将 long json string 更改为 "{\"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\"}" 我会 appriciate 任何想法 ** 异常错误:右侧值不匹配

您的模式匹配操作完美无缺。我认为问题是,变量 ReturnCodeStateBJ 之一已经绑定。

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

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

要么成功,要么失败。

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

您的模式匹配将成功,未绑定变量(ReturnCodeStateB)的值将根据 [=21= 的模式设置].

案例 2:J 已经绑定到 "{jsondata}"

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

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