erlang优先接受

J-will 发布于 2013/08/26 18:03
阅读 276
收藏 0

《Erlang程序设计》中有一段示范代码(中文版,110页)


priority_receive()->
	receive
		{alarm,X} ->
			{alarm,X}
	after 0 ->
		receive
			Any ->
				Any
		end
	end.

书上的解释是,通过0超时实现了一个“优先接收”的程序,优先接收进程信箱中就能与{alarm,X}匹配的消息,如果没有after 0 字句,那么alarm消息就不会最先匹配。


可是我实验的结果是,无论有没有after 0字句,receive语句总是优先与进程信箱中的能与{alarm,X}匹配的消息进行匹配。不知道是翻译问题,还是我在哪里理解不对?


(注)原文中有一句话,“请牢记只有在邮箱中的所有消息都进行过模式匹配之后才会检查after段是否需要进行运算”,所以我更加不理解所谓的优先接收,因为优先接收是receive语句自带的特性啊。

加载中
0
yanchao90
yanchao90

是他翻译的问题,你理解的没错。

receive先检查消息,没有消息就才会走after

J-will
J-will
谢谢!
返回顶部
顶部