Я новичок в 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, я никогда не смогу обработать MessageB?
И как я могу это решить? Поместив обработчик MessageB в loop2? Это выглядит не очень грациозно, особенно когда есть несколько уровней утверждений о приеме.
Есть ли лучший способ сделать это?
Спасибо! Что, если я все еще ожидаю сообщения B при обработке C и D? Повторять ли обработчик B в цикле2? Это петли очень многословны. – NeoWang