来自fun()的新线回声

时间:2011-12-09 11:05:19

标签: erlang

我最近一直在试图掌握Erlang,但我对此感到有些困惑......

问题

我正在尝试在shell中编写一个函数对象,它接收任何消息并将其回送到shell后跟一个新行。

尝试

我对这个功能的尝试是:

Echo = fun() -> receive Any -> io:fwrite(Any), io:fwrite("~n") end end.

但是,如果我为此生成一个新进程......

someNode@someHost 2> Pid = spawn(Echo).
<0,76,0>

...然后发送消息......

someNode@someHost 3> Pid ! "Hello".
Hello"Hello"

...在写入之后,以及在消息返回之前,我似乎没有获得新的行字符。

问题

我的方法有什么问题,这会阻止这个(非常简单的)示例按预期工作吗?

提前致谢

1 个答案:

答案 0 :(得分:4)

你的问题是原子性的。 打印第一行后,&#34;主线程&#34;安排并打印Pid ! Msg的结果,即Msg

io:fwrite可以像C中的printf一样接受参数:

Echo = fun() ->
    receive
        Any ->
            io:fwrite("~p~n", [Any])
    end
end