适合C# Actor的消息执行方式(2):C# Actor的尴尬
2010-09-30 20:50:29 来源:WEB开发网例如在pong对象的实现中,我们使用模式匹配,减少了不必要的类型转换和赋值,让代码变得简洁易读。还有一点值得顺带一提,我们在F#中可以灵活的定义一个操作符的作用,在这里我们便把“<<”定义为“发送”操作,避免Post方法的显式调用。这种做法往往可以简化代码,从语义上增强了代码的可读性。例如,我们可以这样启动乒乓测试:
ping << Pong(pong)
至于结果则与C#的例子一模一样,就不再重复了。
F#中的弱类型消息
可是,F#的世界就真的如此美好吗?试想,我们该如何实现一个需要接受多种不同消息的Actor对象呢?我们只能这样做:
let another =
{ new obj Actor() with
override self.Receive(message) =
match message with
| :? PingMsg as pingMsg ->
// sub matching
match pingMsg with
| Ping(pong) -> null |> ignore
| Finished -> null |> ignore
| :? PongMsg as pongMsg ->
// sub matching
match pongMsg with
| Pong(ping) -> null |> ignore
| :? (string * int) as m ->
// sub binding
let (s, i) = m
null |> ignore
| _ -> failwith "Unrecognized message" }
由于我们必须使用object作为Actor接受到的消息类型,因此我们在对它作模式匹配时,只能进行参数判断。如果您要更进一步地“挖掘”其中的数据,则很可能需要进行再一次的模式匹配(如PingMsg或PongMsg)或赋值(如string * int元组)。一旦出现这种情况,在我看来也变得不是那么理想了,我们既没有节省代码,也没有让代码变得更为易读。与C#相比,唯一的优势可能就是F#中相对灵活的类型系统吧。
C#不好用,F#也不行……那么我们又该怎么办?
出处:http://www.cnblogs.com/JeffreyZhao/archive/2009/07/13/message-execution-model-for-c-sharp-actor-2-embarrassing-c-sharp-actor.html
- ››适合做商品团购营销的网站
- ››适合所有浏览器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
更多精彩
赞助商链接