8
votes

Implémenter C # Opérateur d'égalité de F #

est-il possible de fournir une implémentation de l'opérateur de l'égalité C # (==) en F #?

EDIT STRY>: P>

Ce code: P>

static member (=) (left : Foo, right : Foo) =


2 commentaires

Voulez-vous une fonction F # qui se comporte de la même manière que l'opérateur d'égalité C #? C'est-à-dire en utilisant opérateur == si disponible et appelant objet.equals sinon?


Je voulais un opérateur d'égalité qui serait appelé lorsque == est utilisé à partir de C #.


3 Réponses :


3
votes

Vous recherchez surcharge de l'opérateur dans F # ?

Les différents opérateurs sont définis en CIL, la surcharge de surcharge de chargement d'un opérateur de F # surchargerait-la dans C #, VB.NET et toute autre langue .NET qui prend en charge cet opérateur.


1 commentaires

J'étais sous la fausse impression que la surcharge = in f # produit différent IL que sur la surcharge == dans c #. C'est toujours un peu bizarre imo. J'ai mis à jour la question avec les détails.



8
votes

le figuré:

type Foo() =
    static member op_Equality (left : Foo, right : Foo) =


0 commentaires

2
votes

Vraisemblablement, OP_EQUALITY CODE> est favorisé sur (=) code> puisque ce dernier ressemble à ce que cela devrait affecter l'opérateur d'égalité dans F #. C'est-à-dire que le comportement du code suivant pourrait être déroutant:

type T() =
  static member (=)(x:T,y:T) = true

let eq = (=) (T()) (T()) // false???


0 commentaires