3
我已閱讀F# how to extended the generic array type?這個問題,它的答案非常接近我想要做的。是否可以擴展'T[][]
類型,就像'T[]
一樣?F#擴展鋸齒陣列類型
我已閱讀F# how to extended the generic array type?這個問題,它的答案非常接近我想要做的。是否可以擴展'T[][]
類型,就像'T[]
一樣?F#擴展鋸齒陣列類型
鋸齒狀陣列[][]
是專門用於另一陣列的陣列[]
。
您可以使用[,]
這是一個二維數組:
type 'T ``[,]`` with
member a.First = a.GetValue(0,0)
(array2D [| [| 1 .. 10 |] ; [| 11 .. 20 |] |]).First
但如果你真的想用[][]
你不能用這個F#的特定符號做到這一點,就不可能聲明它的專業,因爲這個符號反映了類型定義,所以你必須做的.NET方式:
[<System.Runtime.CompilerServices.Extension>]
module Extensions =
[<System.Runtime.CompilerServices.Extension>]
let First (x :_ [][]) = x.[0].[0]
從C#訪問時,它會正常工作,但是從F#我想你將需要F#3.1
是的,這是可以做到的。但是'''T [] []''和''T [,]''不是同一類型 - 或者我在這裏錯過了什麼? – torbonde
你是對的他們不一樣,但'T [] []是一個正常的數組有數組作爲元素。所以,如果你想像這樣使用它,你可以按照你所鏈接的答案中顯示的方式來擴展它。如果你想爲一個特定類型的泛型指定一個擴展,我認爲這是不可能的,但是你可以使用標準的.NET方法。但你需要F#3.1 – Gustavo
非常感謝!我會牢記這一點。 – torbonde