2012-03-02 3 views
3

Il semble que l'on doive remplacer Equality afin de remplacer la comparaison.Comparaison personnalisée et égalité dans fsharp

Est-ce vrai? Y a-t-il une raison pour laquelle je suis absent?

+2

Voir [le blog de Don Syme] (http://blogs.msdn.com/b/dsyme/archive/2009/11/08/equality-and-comparison-constraints-in-f-1-9-7. aspx). – Daniel

Répondre

5

Non, il est possible d'avoir seulement la comparaison personnalisée

[<CustomComparison>] 
[<StructuralEquality>] 
type Node = 
    | Data of string 
    | Nil 

    with 

    interface System.IComparable with 
     member x.CompareTo y = 0 

Notez bien que ce code produira un recomending d'avertissement que vous mettre en œuvre et l'égalité du type. C'est généralement une bonne idée. Si vous passez par la difficulté d'implémenter la comparaison, alors l'égalité est directe (Compare == 0).

+0

Je ne sais pas pourquoi, mon VS affichait une erreur. c'était probablement juste la lenteur de l'inférence de type ... – nicolas

+0

Merci. au moins j'en suis sûr maintenant. – nicolas

+0

@nicolas VS utilisera le soulignement rouge sur la définition de 'Node'. Mais ce n'est qu'un avertissement et non une erreur. À mon humble avis, ils ont probablement utilisé la mauvaise couleur pour ce gribouillis – JaredPar