Jus*_*ang 3 f# discriminated-union comparison-operators
我正在学习F#,我正在建立一套快速的功能,比较两个扑克手并确定胜利者.
我让这个有区别的联盟代表了扑克手的类别:
type Category =
| HighCard
| OnePair
| TwoPair
| ThreeOfAKind
| Straight
| Flush
| FullHouse
| FourOfAKind
| StraightFlush
Run Code Online (Sandbox Code Playgroud)
我使用此代码来比较类别,以确定一只手是否优于另一只手:
if playerCategory > houseCategory then Win
elif playerCategory < houseCategory then Loss
// ... More code to handle cases within the same category
Run Code Online (Sandbox Code Playgroud)
所以,例如,表达式:
let playerCategory = FullHouse
let houseCategory = HighCard
if playerCategory > houseCategory then Win
elif playerCategory < houseCategory then Loss
// ... Other code
Run Code Online (Sandbox Code Playgroud)
会有价值Win.
但是,我不明白<和>运算符如何在这里工作.(最初我有一个函数将每个案例映射到一个数值,但我意识到这没有必要.)如果我重新排列案例的顺序然后逻辑中断,所以我假设每个案例都分配了一些默认值对应于其类型内的顺序?
但我肯定会更欣赏一点......
这在说明书中描述:
默认情况下,称为结构类型的记录,联合和结构类型定义隐式包含编译器生成的结构相等,散列和比较声明.这些隐式声明由结构相等和散列的以下内容组成
8.15.4生成的CompareTo实现的行为
如果T是联合类型,则首先在两个值的并集案例的索引上调用Microsoft.FSharp.Core.Operators.compare,然后在union案例所携带的数据的每个对应的x和y字段对上调用.返回第一个非零结果.