【问题标题】:Errlang: no match of right hand side valueErrlang:右侧值不匹配
【发布时间】:2014-04-12 10:26:30
【问题描述】:

我开始使用 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>

为什么会这样?

【问题讨论】:

标签: erlang


【解决方案1】:

可能,“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.

【讨论】:

    猜你喜欢
    • 2016-05-05
    • 2015-12-06
    • 2019-02-27
    • 1970-01-01
    • 2014-02-06
    • 1970-01-01
    • 2022-11-28
    • 2014-06-27
    • 1970-01-01
    相关资源
    最近更新 更多