... end.不同的元组(tuple)配合不同的原子(atom)便表示了一条消息的“含义”,但是使 用C#您又该怎样来表现这些“命令”呢?您可能会使用:使用object[]作为消息类型,并检查其元素。使用object作为消息类型,并判断消息的具体类型。使用枚举或字符串代表“命令”,配合一个参数集合。第1种做法十分麻烦;第2种则需要“先定义,后使用”也颇为不易;而第3种做法,平 心而论,如果有一个“分发类库”的支持就会比较理想——可能比这篇文章中的F#还要理 想。老赵正在努力实现这一功能,因为C#的这个特性会影响到.NET平台下所有Actor模型 (如第一篇文章中所提到的CCR或Retlang)的使用。而目前,我们先来看看F#是否可以略为缓解一下这方面的问题。在F#中使用Actor模型Erlang没有严谨的类型系统,其“消息类型”是完全动态的,因此非常灵活。那么F# 又有什么“法宝”可以解决C#中所遇到的尴尬呢?在现在这个问题上,F#有三个领先于C# 的关键:灵活的类型系统强大的模式匹配自由的语法虽然F#也是强类型的编译型语言(这点和C#一致),但是F#的类型系统较C#灵活许多 ,例如在“聊天”这个示例中,我们就可以编写如下类型作为“消息”类型:type Message = string type ChatMsg = | Start of Person | Greeting of Person * Message | Say of Person * Message | Bye of Person * Message