2013-08-21 21 views
6

Takip eden this question Genel F # Array Türünü nasıl uzatabileceğimi (veya değiştirebileceğimi) merak ediyorum.F # Genel dizi türü nasıl genişletilir?

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

ama Tomas belirtildiği gibi olmayan jenerik geçerli: ben bunu. Sonraki bunu denedim ama çalışmıyor: Bu ad buldum F # scource olarak

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

, ama ya çalışmıyor:

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

cevap

16

Bu biraz kafa karıştırıcı - ama son zamanlarda oldu F # şartnamede şey arıyor ve bu rastladım: çift ters tırnak kodlama normalde bir propert yapmak istiyorsanız, örneğin (geçerli F # tanımlayıcıları içine ayrılmış anahtar açmak için kullanılır

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

[| 1 .. 10 |].Last 

adında boşluk bulunan veya let olarak adlandırılmış). Burada, muhtemelen derleyicinin, diziler için özel bir sözdizimi yerine, sıradan bir "ad" olarak []'u işlemesi gerektiği anlamına gelir.