适合C# Actor的消息执行方式(2):C# Actor的尴尬
2010-09-30 20:50:29 来源:WEB开发网This is a good solution:
loop(State) ->
receive
...
{execute, Mod, Funcs, Args} -> % Use a tagged message.
apply(Mod, Funcs, Args},
loop(State);
{get_status_info, From, Option} ->
From ! {status_info, get_status_info(Option, State)},
loop(State);
...
end.
第一段代码使用的模式为拥有三个“绑定”的“元组”。由于Erlang的弱类型特性,任何拥有三个元素的元组都会被匹配到,这不是一个优秀的实践。在第二个示例中,每个模式使用一个“原子”来进行约束,这样可以获取到相对具体的消息。为什么说“相对”?还是因为Erlang的弱类型特性,Erlang无法对From和Option提出更多的描述。同样它也无法得知execute或get_status_info这两个tag的来源——当然,在许多时候,它也不需要关心是谁发送给它的。
在C#中使用Tag Message
在C#中模拟Erlang里的Tag Message很简单,其实就是把每条消息封装为Tag和参数列表的形式。同样的,我们使用的都是弱类型的数据——也就是object类型。如下:
public class Message
{
public object Tag { get; private set; }
public ReadOnlyCollection<object> Arguments { get; private set; }
public Message(object tag, params object[] arguments)
{
this.Tag = tag;
this.Arguments = new ReadOnlyCollection<object>(arguments);
}
}
- ››适合做商品团购营销的网站
- ››适合所有浏览器hack的CSS技巧
- ››消息称中国移动即将获得iPhone 4销售权
- ››适合C# Actor的消息执行方式(1):Erlang中的模式...
- ››适合C# Actor的消息执行方式(2):C# Actor的尴尬...
- ››适合C# Actor的消息执行方式(3):中看不中用的解...
- ››适合C# Actor的消息执行方式(4):阶段性总结
- ››适合C# Actor的消息执行方式(5):一个简单的网络...
- ››适合C# Actor的消息执行方式(6):协变与逆变
- ››适合1-5个月经验的seo优化全过程分享
- ››消息称联通高层赴美谈引入iPhone4 将带WiFi
- ››消息称微软将在近期发布IE9 beta
更多精彩
赞助商链接