2013-06-07 12 views
6

W tym previous question dowiedziałem się, że w F # an array<'T> to nie to samo co System.Array.F # - Co to jest tablica <'T>?

VS mówi, że array<'T> dziedziczy i ma pełną nazwę Microsoft.FSharp.Core.array<_> oraz kilka dodatkowych interfejsów.

Jednak MSDN mówi, że array<'T> jest skrótem typu System.Array. I że ma notację arr.[i], aby uzyskać i ustawić elementy.

Czy moja lekcja brzmi: array<'T> to skrót oznaczający rozszerzenia typu i dodatkowe interfejsy? Gdzie jest najlepsze miejsce, żeby to sprawdzić?

Odpowiedz

10

Typ jest skrótem, ale nie dla podstawowego typu System.Array, ale dla innego rodzaju ogólnego, który reprezentuje tablice w języku F #, zapisanym jako 'T[].

Oznacza to, że

  • System.Array jest non-generic typ bazowy (gdzie nie można używać indeksowania i można dostać tylko elementy jako obiekty)

  • 'T[] i array<'T> znaczy dokładnie to samo . Są one typem ogólnym, który obsługuje indeksowanie, a otrzymujesz od niego wartości 'T.

+1

Należy również zauważyć, że typy ogólne można zapisać przed typem i bez nawiasów klamrowych, dzięki czemu można napisać, na przykład, "tablicę znaków", która brzmi bardzo ładnie; znacznie ładniejsze niż 'tablica ' lub 'string []'. – Jwosty

+0

Jak mogę utworzyć rozszerzenia typu na '[]'? 'type Microsoft.FSharp.Collections.Array z element arr.last z get() = arr. [arr.Length -1]' nie działa dla mnie – Goswin

+0

dla rozszerzenia typu zobacz: http://stackoverflow.com/questions/18359825/f-how-to-extended-the-generic-array-type – Goswin