Question

J'ai lu le texte de présentation à l'adresse StrangeLights , J'ai lu le passage d'Expert. F # (page 119), mais je ne vois pas comment ils s'appliquent à mon code:

Pour mes tests, je souhaite vérifier l’égalité entre les flottants, avec un peu de tolérance. Je convertis tout en unités de mesure, mais je veux pouvoir être «générique»:

let toleq (e:float<_>) a b = (abs ( a - b ) ) < e

Je peux ensuite l'utiliser pour vérifier l'égalité sur différents "types" de float, ou la modifier pour en faire un personnalisé:

toleqm = toleq 1.0e-10<m>

Mais je reçois le message suivant:

Type inference has inferred the signature
    val toleq : float<'u> -> float<'u> -> float<'u> -> bool
Either define 'toleq' as a simple data term, make it a function, or add a 
    type constraint to instantiate the type parameters.

Je ne vois pas comment je pourrais faire plus pour en faire une fonction - je ne vois aucun paramètre implicite.

Quoi de neuf?

Était-ce utile?

La solution

Eh bien, j'ai déconné un peu et trouvé la solution, désespérée, mais je ne suis pas sûr de comprendre pourquoi ...

let toleq (e:float<_>) (a:float<_>) (b:float<_>) = (abs ( a - b ) ) < e

Ugh, il est presque aussi moche que les déclarations génériques en C #.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top