2013-08-21 2 views
6

Nach this question Ich frage mich, wie (oder wenn) ich den generischen F # Array-Typ erweitern kann. ich dies tun könnte:F # Wie wurde der generische Array-Typ erweitert?

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

aber als Tomas erwähnt ist es nicht generisch. Als nächstes habe ich versucht, diese aber es funktioniert nicht:

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

Im F # scource ich diesen Namensraum gefunden, aber es funktioniert auch nicht:

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

Antwort

16

Das ist ein bisschen verwirrend - aber ich war vor kurzem Suche nach etwas in der Spezifikation F # und kam über diese:

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

[| 1 .. 10 |].Last 

die Doppel-Graviszeichen Codierung wird normalerweise verwendet, um reservierten Schlüsselwörter in gültige F # Bezeichner (zB zu schalten, wenn Sie einen propert haben wollen y, das ein Leerzeichen im Namen hat oder let heißt). Hier bedeutet es wahrscheinlich, dass der Compiler [] als gewöhnlichen Typ "name" statt als eine spezielle Syntax für Arrays behandeln muss.

Verwandte Themen