2013-08-21 11 views
6

Po this question Zastanawiam się, jak (lub jeśli) mogę rozszerzyć ogólne F # Array Type. mogę to zrobić:F # jak rozszerzyć ogólny typ tablicy?

type System.Array with 
    member a.Last = a.GetValue(a.Length - 1) 

ale jak wspomniano Tomas to nie jest nazwą rodzajową. Następny próbowałem tego, ale to nie działa:

type Microsoft.FSharp.Collections.Array with // Error: Array is not defined  
    member a.Last = a.[a.Length - 1] 

w F # scource Znalazłem nazw, ale to nie działa albo:

type Microsoft.FSharp.Primitives.Basics.Array with // Error: Array is not defined   
    member a.Last = a.[a.Length - 1] 

Odpowiedz

16

Jest to nieco mylące - ale byłem niedawno szukasz czegoś w specyfikacji F # i natknąłem się na to:

type 'T ``[]`` with 
    member a.Last = a.[a.Length - 1] 

[| 1 .. 10 |].Last 

kodowanie dwukrotnie lewy apostrof jest zwykle używany do włączania zarezerwowanych słowa kluczowe w ważnych identyfikatorów F # (np jeśli chcesz mieć propert y ma spację w nazwie lub nosi nazwę let). Tutaj prawdopodobnie oznacza to, że kompilator musi traktować [] jako zwykłą "nazwę" zwykłego typu, a nie jako specjalną składnię dla tablic.

Powiązane problemy