在回答这个问题compare
时,我发现了受歧视工会的以下行为。
type T = A | B | C | D
compare A B (* val it : int = -1 *)
compare A C (* val it : int = -2 *)
compare A D (* val it : int = -3 *)
我对此感到惊讶。
我可以依靠compare
测量这样的构造函数之间的“距离”吗?
规范说(第 154 页)关于生成的compareTo
:
如果 T 是联合类型,则首先在联合案例的索引上为两个值调用 Microsoft.FSharp.Core.Operators.compare,然后在每个对应的 x 和 y 字段对上为联合案例携带的数据调用。返回第一个非零结果。
从那以后,我希望compare
typeT
总是给出一个,-1,0,1
因为这就是compare
数字类型的行为方式。(正确的?)