J'ai actuellement la fonction:Définir un opérateur d'égalité pour les flotteurs avec la tolérance: (~ =)
let equal x1 x2 = abs(x1 - x2) < tolerance
pour vérifier l'égalité avec une certaine tolérance puisque nous vérifions flotteurs de sorte qu'ils ne seront pas exactement égales.
Comment puis-je en faire un opérateur infixe binaire sur des flottants à la place, comme dans x ~ = y?
J'ai essayé:
type System.Double with
static member (~-) (this, that: System.Double) =
equal this that
, mais il dit que je les méthodes d'extension ne peuvent pas fournir la surcharge de l'opérateur
J'ai essayé alors d'hériter de System.Double et faire la même chose:
type double() =
inherit System.Double()
static member (==) (this, that: double) =
equal this that
mais il se plaint que je ne peux pas hériter d'un type "scellé"
Comment serait d vous définissez alors un type double avec cette surcharge d'opérateur qui agit comme un System.Double normal ("float" dans F #) mais avec cette méthode de surcharge d'opérateur?
merci! apparemment, je ne peux pas utiliser cet opérateur, cependant. Beaucoup d'autres opérateurs ne fonctionnent pas alors j'ai dû utiliser "==" à la place –
Strange. Fonctionne bien pour moi. Assurez-vous que 'tolerance' est un' float'. Quelle version de F # utilisez-vous? Qu'est-ce que vous obtenez si vous envoyez la définition ci-dessus à FSI et l'utilisez? – Mau
@Mau je peux vous montrer exactement ici http://chat.stackoverflow.com/rooms/52465/f-invalid-infix-operator –