Piszę mój kod tak, jakby były to te same rzeczy, i nie ma problemów, ale zaczyna mnie mylić, gdy unoszą się nad funkcją w Visual Studio i zobacz, że definicje typów zawierają 3 różne typy, które miałem myśl była taka sama. Czy oni są tacy sami? Czy są one różne?Czy tablica float, float [] i double [] są różne lub takie same?
Odpowiedz
Są takie same. Zobacz skróty typów u dołu dokumentacji FSharp.Core. float = double = System.Double
i array<'T> = 'T[]
. Można również zdefiniować własne skróty typu i korzystać z nich w ten sam sposób:
type dbl = double
let (d:dbl) = 1.0
Nie pytałem o to, ale należy pamiętać, że jedynym miejscem, gdzie typ skróty mogą nie działać zupełnie jak można się spodziewać jest miarą typy; float<_>
jest zdefiniowany niezależnie od float
, double
i System.Double
i nie ma czegoś takiego jak odpowiadający double<_>
lub System.Double<_>
.
ok, dzięki kvb ... –
Oprócz skrótów typu, istnieją dwie przydatne rzeczy, które należy wiedzieć o typach F #. Przede wszystkim istnieją dwa sposoby na wpisanie nazw rodzajów ogólnych. Jednym ze sposobów jest użycie składni SML i drugi sposób polega na użyciu składni .NET:
- Przy użyciu składni .NET, piszesz
array<'T>
lub na przykładOtherType<'T1, 'T2>
(dla typów z więcej niż jednego parametru typu rodzajowego) . - W składni OCaml, to samo jest napisane jak
'T array
lub('T1, 'T2) OtherType
Te dwa zapisy są równoważne - jeśli zadeklarować wartość typu uwagami przy użyciu składni .NET, można przypisać je do wartości adnotowane przy użyciu składni OCaml. 'T[]
to specjalne oznaczenia dla tablic, ale to wyjaśnia, dlaczego array<'T>
jest takie samo jak 'T array
.
Drugą rzeczą jest to, że F # używa nieco niefortunnego nazewnictwa dla liczb zmiennoprzecinkowych. Jest to prawdopodobnie ze względu na kompatybilność z SML, ale można go łatwo pomylić programistów .NET:
- F # pływak znamionowej odpowiada
System.Double
w .NET (który jest nazywanydouble
w C#) - F # float32 typu odpowiada
System.Single
w NET (który nazywafloat
C#)
jako @kvb wskazuje dwukrotnie inny t ype alias dla typu System.Double
.
Oczywiście istnieje również skrót "single", który jest również synonimem 'float32' . Oraz 'int = int32 = System.Int32' i' int8 = sbyte = System.SByte', itp. – kvb
- 1. float vs double (w Javie)
- 2. Tablica bajtów do float
- 3. Java: Czy powinienem używać float lub Float?
- 4. double lub float, który jest szybszy?
- 5. Float vs double Math Java
- 6. Czy CDN i Cloud są takie same?
- 7. Mając szorstka razem zdecydowaliśmy się na float, double, lub DZIESIĘTNY
- 8. Tablica w php i dict w python są takie same?
- 9. JavaScript Float + Float = String?
- 10. wykryć, czy dwie ścieżki są takie same
- 11. Czy drools są takie same jak jrules?
- 12. Abstrahowanie przez Float, Double i BigDecimal w Scala
- 13. Sprawdź, czy dwa elementy są takie same
- 14. Czy lewe połączenia zewnętrzne i lewe łączenia są takie same?
- 15. niejawna konwersja/promocja float lub double w wyrażeniach między C# i Java
- 16. Czy "div> p" i "div p" są takie same?
- 17. Czy CAST i CONVERT są takie same w SQL?
- 18. Czy znaki Unicode i Ascii są takie same?
- 19. Konwersja double float bez opierania się na tryb FPU zaokrąglania
- 20. Czy notacja naukowa jest interpretowana jako int lub float?
- 21. Jaka jest różnica między Float i float w java?
- 22. Sprawdzanie czy wartość float jest NaN
- 23. Przypadki gdzie float == i! = Nie są bezpośrednimi przeciwieństwami
- 24. XML :: LibXML - wykrywanie, czy dwa elementy są takie same?
- 25. Makro lub funkcja do skonstruowania float (double) z danego znaku, mantysy i wykładnika?
- 26. Parsowanie int lub float z FParsec
- 27. Jak przekonwertować ciąg na float lub int?
- 28. Dla double f, float g, jak znaleźć największy int i, taki, że i * g <= f
- 29. Wyniki odlewania mnożenia przez Float dają różne wyniki, jeśli Float jest najpierw zapisany w zmiennej?
- 30. Odnośnie typu float precyzją
http://msdn.microsoft.com/en-us/library/dd233193.aspx –