Erlang:没有右手边的值匹配

时间:2014-03-09 10:40:21

标签: erlang

我开始使用Erlang,但我已经陷入困境了。我从一本书中复制了这个例子:

-module(echo).
-export([start/0, loop/0]).

start() ->
    spawn(echo, loop, []).

loop() ->
    receive
        {From, Message} ->
            From ! Message,
            loop()
    end.

但是当我尝试它时,我得到一个我不明白的错误:

31> c(echo).          
{ok,echo}
32> f.      
f
33> Pid = echo:start().
** exception error: no match of right hand side value <0.119.0>

为什么会这样?

1 个答案:

答案 0 :(得分:9)

可能,'Pid'已经分配了一些值,而您正在尝试重新分配它。

以下是我在我的机器上的行为:

Eshell V5.9.1  (abort with ^G)
1> c(echo).
{ok,echo}
2> f.
f
3> Pid = echo:start().
<0.39.0>
4> Pid = echo:start().
** exception error: no match of right hand side value <0.41.0>
5>

正如你所看到的,第一个'Pid ='构造很好,但第二个构建了你所描述的错误信息。

我认为,你之前已经在shell中使用了Pid并且它已经分配了一些值。

尝试'重置'Pid变量并使用如下:

8> f(Pid).
ok
9> Pid.
* 1: variable 'Pid' is unbound
10> Pid = echo:start().
<0.49.0>

或者你可以通过使用这样的结构忘记所有变量:

13> f().
ok
14> Pid = echo:start().
<0.54.0>

注意使用 f()。 - 而不仅仅是 f。