|
|
1
4
下面的代码表示“执行接收单个消息”,因此如果您希望接收多个消息,则需要循环。在Erlang中,这样做的典型方式是尾呼自己。
在上一个示例中,看起来您有某种状态机,其中A变为另一个状态,而B保持相同状态。当您处于需要C和D消息的状态时,无法再接收a消息并不一定是问题,但这取决于问题域。 |
|
2
2
你明白了。 关于循环和循环2的示例,这样的实现意味着当您收到消息A时,您希望选择一些新的行为,如果稍后出现消息B,您应该放弃它。 (请注意,如果使用带有大写字母的MessageA,它将变为变量名,并且将与任何消息匹配!) 。在这种情况下,这是有意义的,您应该添加垃圾消息子句以从队列messageB和其他意外消息中删除:
另一种可能是实现一种状态机,然后应该使用OTP行为gen_fsm。 如果不是这样的话,意味着您仍然希望稍后收到消息B,我强烈建议您保持一个循环,并在一个receive语句中处理所有可能的消息。 |