Erlang模式不匹配,但正确,该怎么办?

时间:2014-06-18 18:56:10

标签: erlang pattern-matching

我对erlang中的模式匹配有一个疯狂的问题:

我的接收栏:

...
receive
    {set_val,Val} -> 
        log("got: ~p",[Val]);

    Any ->
        log("~p is an unknown command",[Any])
end.

我发送的内容:

...
{myreceive,myreceive@workstation} ! {set_val,100}

我的日志中显示的内容:

{set_val,100} is an unknown command

为什么第一种模式不匹配? (以及如何使其匹配:/)

2 个答案:

答案 0 :(得分:5)

我看到的唯一可能是Val已经在你的函数中绑定到一个不同于100的值。

答案 1 :(得分:1)

它似乎按预期工作。

1> spawn(fun() -> receive {set_val, Val} -> io:format("got: ~p~n", [Val]); Any -> io:format("~p is an unknown command",[Any]) end end) ! {set_val,100}.
got: 100
{set_val,100}

作为Pascal mentioned,必须将变量Val绑定到与100不同的位置。