2010-03-09 15 views
7

Ich schreibe meinen Code, als ob diese alle die gleiche Sache sind und keine Probleme haben, aber es beginnt mich zu verwirren, wenn ich über eine Funktion in Visual Studio schwebe und sehe, dass die Typdefinitionen 3 verschiedene Typen enthalten Gedanken waren alle gleich. Sind sie gleich? Oder sind sie anders?Sind float array, float [] und double [] verschieden oder gleich?

+0

http://msdn.microsoft.com/en-us/library/dd233193.aspx –

Antwort

11

Sie sind gleich. Siehe die Typenkürzel am Ende der FSharp.Core Dokumentation. float = double = System.Double und array<'T> = 'T[]. Sie können auch Ihre eigene Art Abkürzungen definieren und sie auf die gleiche Weise verwenden:

type dbl = double 
let (d:dbl) = 1.0 

Sie darüber nicht fragen, aber beachten Sie, dass der Ort, wo Typ Abkürzungen nicht ganz wie Sie Maßnahme erwarten könnte funktionieren würde, ist Arten; float<_> ist unabhängig von float, double und System.Double definiert, und es gibt keine entsprechenden double<_> oder System.Double<_>.

+0

ok, danke kvb ... –

7

Neben den Typenkürzeln gibt es zwei nützliche Dinge, die Sie über F # -Typen wissen sollten. Zuallererst gibt es zwei Möglichkeiten, Namen generischer Typen zu schreiben. Eine Möglichkeit ist es, die OCaml Syntax zu verwenden und die zweite Möglichkeit ist die .NET-Syntax zu verwenden:

  • Wenn .NET-Syntax, die Sie schreiben array<'T> oder zum Beispiel OtherType<'T1, 'T2> (für Typen mit mehr als einem generischen Typparameter) .
  • In der OCaml Syntax ist die gleiche wie 'T array oder ('T1, 'T2) OtherType geschrieben

Diese beiden Bezeichnungen sind gleichwertig - wenn Sie einen Wert vom Typ kommentierte mit .NET Syntax deklarieren, können Sie es auf einen Wert zuweisen mit der OCaml-Syntax kommentiert. 'T[] ist eine spezielle Notation für Arrays, aber dies erklärt, warum array<'T> das gleiche wie 'T array ist.

Die zweite Sache ist, dass F # ein bisschen unglückliche Benennung für Gleitkommazahlen Typen verwendet. Dies ist wahrscheinlich auf die Kompatibilität mit OCaml, aber es kann leicht .NET-Programmierer verwirren: # float Typ entspricht System.Double in .NET (die aufgerufen wird, double in C#)

  • F # float32

    • F Typ entspricht System.Single in .NET (die float in C# genannt wird)

    Wie @kvb darauf hinweist, Doppel ist ein weiteres T Ype Alias ​​für den System.Double Typ.

  • +1

    Natürlich gibt es auch die Abkürzung 'single', die auch mit' float32' synonym ist . Und 'int = int32 = System.Int32' und' int8 = sbyte = System.Sbyte' usw. – kvb

    Verwandte Themen