2013-08-21 19 views
6

に続いてthis question私はジェネリックF#アレイタイプをどのように拡張できるのだろうか?F#一般的な配列タイプを拡張する方法は?

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

をしかし、トマスが述べたように、それは非ジェネリックです: 私はこれを行うことができます。次の私はこれを試してみましたが、それは動作しません:

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

私はこの名前空間を見つけたが、それはどちらか動作しません。

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

答えて

16

これは少し混乱して - しかし、私は最近でしたF#の仕様で何かを探していると、この出くわし:

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

[| 1 .. 10 |].Last 

ダブルバッククォートのエンコーディングは、通常、有効なF#の識別子に予約キーワードを回すために使用されている(例えば、あなたがpropertを持っているしたい場合名前にスペースが含まれているか、letという名前のy)。ここでは、おそらく、コンパイラが配列の特殊な構文としてではなく、普通の型 "名前"として[]を扱う必要があることを意味します。

関連する問題