Domanda

Ho letto il testo in StrangeLights , Ho letto il passaggio di Expert F # (pagina 119), ma non riesco a vedere come si applicano al mio codice:

Per i miei test, voglio verificare l'uguaglianza tra i float, con un po 'di tolleranza. Sto convertendo tutto in unità di misura, ma voglio essere in grado di essere "generico":

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

Posso quindi usarlo per verificare l'uguaglianza su diversi 'tipi' di float, o curry per crearne uno personalizzato:

toleqm = toleq 1.0e-10<m>

Ma ricevo il seguente messaggio:

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.

Non vedo più come posso fare per renderlo una funzione - Non vedo alcun parametro implicito.

Che succede?

È stato utile?

Soluzione

Beh, ho fatto un po 'di casino e ho trovato la soluzione, disperato, ma non sono sicuro di capire perché ...

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

Ugh, è quasi brutto quanto le dichiarazioni generiche in C #.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top