我是 Erlang 的新手,所以请放轻松。
我对如何在 erlang 中执行接收语句感到困惑,例如:
loop() ->
receive
MessageA -> handlerA();
MessageB -> handlerB()
end
如果收到 MessageA 并执行了 handlerA,一段时间后,在进程的收件箱中收到 MessageB,是否执行 handlerB?
我猜不是,因为我看到很多代码会递归地再次执行接收语句:
loop() ->
receive
MessageA ->
handlerA(),
loop();
MessageB ->
handlerB(),
loop()
end
但是这里有个问题,如果 messageA 的处理程序包含另一个像这样的接收语句:
loop() ->
receive
MessageA ->
loop2(),
MessageB ->
handlerB(),
loop()
end
loop2() ->
receive
MessageC ->
handlerC()
loop2()
MessageD ->
handlerD()
loop2()
end
这样的话,是不是说如果我进入MessageA的hander,就永远不能处理MessageB了?
我该如何解决这个问题?通过将 MessageB 的处理程序放入 loop2?这看起来不太优雅,尤其是当有多个级别的接收语句时。
有一个更好的方法吗?