用fun()中的新行返回

  • 本文关键字:新行 返回 fun 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"

…在写入之后和消息返回之前,我似乎没有得到一个新的行字符。

问题

我的方法是否有问题,阻止这个(非常简单)的例子按预期工作?

提前致谢

问题是原子性。在打印第一行之后,"主线程"被调度并打印Pid ! Msg的结果,即Msg

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

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

最新更新