Errore del compilatore F # FS0030, problemi con la limitazione del valore
-
03-07-2019 - |
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?
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 #.