WEB开发网
开发学院软件开发C语言 适合C# Actor的消息执行方式(1):Erlang中的模式... 阅读

适合C# Actor的消息执行方式(1):Erlang中的模式匹配

 2010-09-30 20:50:33 来源:WEB开发网   
核心提示: -module(tut15).-export([start/0,ping/2,pong/0]).ping(0,Pong_PID)->Pong_PID!finished,io:format("pingfinished~n",[]);ping(N,Pong_PID)->

-module(tut15). 
 
-export([start/0, ping/2, pong/0]). 
 
ping(0, Pong_PID) -> 
  Pong_PID ! finished, 
  io:format("ping finished~n", []); 
 
ping(N, Pong_PID) -> 
  Pong_PID ! {ping, self()}, 
  receive 
    pong -> 
      io:format("Ping received pong~n", []) 
  end, 
  ping(N - 1, Pong_PID). 
 
pong() -> 
  receive 
    finished -> 
      io:format("Pong finished~n", []); 
    {ping, Ping_PID} -> 
      io:format("Pong received ping~n", []), 
      Ping_PID ! pong, 
      pong() 
  end. 
 
start() -> 
  Pong_PID = spawn(tut15, pong, []), 
  spawn(tut15, ping, [3, Pong_PID]).

由于Erlang的函数式编程,尾递归,receive原语等特殊的语言特性,其乒乓测试的实现或语义上可能和其他语言有一定区别(详见《天下无处不乒乓》一文)。不过我们现在还是关注Erlang在消息执行时的特性:模式匹配。

虽然Erlang有诸多优秀特性,但是它的数据抽象能力非常有限。在Erlang中常用的数据结构只有三种:

原子(atom):原子使用小写开头的标识符来表示。您可以把原子认为是一种字符串常量来看待,事实上它除了作为标识之外也没有额外的作用。

绑定(binding):大写开头的标示符则为绑定,您可以近似地将其理解为“只能设置一次”的变量。一个绑定内部可以保存任何数据,如一个进程(Erlang的概念,并非指操作系统进程)的id,一个数字,或一个字符串。

上一页  1 2 3 4  下一页

Tags:适合 Actor 消息

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接