我最近一直在试图掌握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"
...在写入之后,以及在消息返回之前,我似乎没有获得新的行字符。
我的方法有什么问题,这会阻止这个(非常简单的)示例按预期工作吗?
提前致谢
答案 0 :(得分:4)
你的问题是原子性的。
打印第一行后,&#34;主线程&#34;安排并打印Pid ! Msg
的结果,即Msg
。
io:fwrite可以像C中的printf一样接受参数:
Echo = fun() ->
receive
Any ->
io:fwrite("~p~n", [Any])
end
end