Sto scrivendo il mio codice come se fossero tutti la stessa cosa, e non avendo problemi, ma sta iniziando a confondermi quando passo il mouse su una funzione in Visual Studio e vedo che le definizioni del tipo contengono 3 tipi diversi che ho avuto il pensiero era lo stesso. Sono gli stessi? O sono diversi?Gli array float, float [] e double [] diversi, o lo stesso?
risposta
Sono uguali. Vedere le abbreviazioni di tipo nella parte inferiore della documentazione FSharp.Core. float = double = System.Double
e array<'T> = 'T[]
. È inoltre possibile definire un tipo abbreviazioni e li usa allo stesso modo:
type dbl = double
let (d:dbl) = 1.0
non hai chiesto a questo proposito, ma nota che l'unico posto dove tipo abbreviazioni potrebbero non funzionare del tutto come ci si aspetterebbe è misura tipi; float<_>
viene definito indipendentemente da float
, double
e System.Double
e non esiste una corrispondenza corrispondente a double<_>
o System.Double<_>
.
ok, grazie kvb ... –
Oltre a digitare le abbreviazioni, ci sono due cose utili da sapere sui tipi di F #. Prima di tutto, ci sono due modi per scrivere nomi di tipi generici. Un modo è quello di utilizzare la sintassi OCaml e il secondo modo è quello di utilizzare la sintassi .NET:
- Quando si usa la sintassi .NET, si scrive
array<'T>
o per esempioOtherType<'T1, 'T2>
(per i tipi con più di un parametro di tipo generico) . - Nella sintassi OCaml, la stessa cosa è scritto come
'T array
o('T1, 'T2) OtherType
Queste due notazioni sono equivalenti - quando si dichiara un valore di tipo annotato utilizzando la sintassi .NET, è possibile assegnare a un valore annotato usando la sintassi OCaml. 'T[]
è una notazione speciale per gli array, ma questo spiega perché array<'T>
è uguale a 'T array
.
La seconda cosa è che F # utilizza un nome un po 'sfortunato per i tipi di numeri in virgola mobile. Ciò è probabilmente dovuto alla compatibilità con OCaml, ma può facilmente confondere i programmatori NET:
- F # galleggiante tipo corrisponde a
System.Double
NET (che è chiamatodouble
in C#) - F # float32 corrisponda a
System.Single
NET (che è chiamatofloat
in C#)
Come @kvb sottolinea, doppio è un'altra t alias yype per il tipo System.Double
.
Naturalmente, c'è anche l'abbreviazione 'single', che è anche sinonimo di' float32' . E 'int = int32 = System.Int32', e' int8 = sbyte = System.SByte', ecc. – kvb
- 1. float vs double (in Java)
- 2. Numeri di versione float, decimal o double
- 3. Conversione di char * in float o double
- 4. Java: double vs float
- 5. Java raytracing float vs double
- 6. Differenza tra float e double in php?
- 7. Double vs float su iPhone
- 8. Ruby float con double 0
- 9. `float` vs` double` in calcoli singoli casuali?
- 10. Conversione da double a float in Java
- 11. Stesso valore per id (float)
- 12. Memorizzando dati statistici, ho bisogno di DECIMAL, FLOAT o DOUBLE?
- 13. opencv: convertire scalare in float o double type
- 14. Java: dovrei usare float o float?
- 15. Clojure^float vs. #^float?
- 16. Come sono rappresentati float e double in C++ (gcc)?
- 17. Converti double in float per cast o Convert.ToSingle()?
- 18. Cosa succede quando si converte double (o float) in ints?
- 19. float vs double su hardware grafico
- 20. Come utilizzare il modulo per float/double?
- 21. non può convertire da double a float
- 22. Prestazioni temporali quando permuting e casting double per float
- 23. dove è op_addition in [int, float, double]
- 24. Confronta array float come int array
- 25. Perché C++ richiede che il complesso venga istanziato solo per float, double o long double?
- 26. CSS - Posizionamento assoluto o float?
- 27. Riassunto su Float, Double e BigDecimal in Scala
- 28. Come inserire valori double e float in sqlite?
- 29. Cast byte array a float
- 30. Javascript Float + Float = String?
http://msdn.microsoft.com/en-us/library/dd233193.aspx –