2014-01-22 2 views

답변

3

들쭉날쭉 한 배열 [][]은 다른 배열을 전문으로하는 배열 []입니다.

당신은 2 차원 배열입니다 [,] 사용할 수 있습니다

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

+0

예, 가능합니다. 하지만'''''''''''''''''''''''''''''''''''''''는 동일한 유형이 아닙니다. – torbonde

+0

당신은 똑같지는 않지만 'T [] []는 배열을 요소로 갖는 일반적인 배열입니다. 그래서 당신이 이것을 이것을 사용하고 싶다면 당신이 링크 된 대답과 같은 방식으로 확장 할 수 있습니다. 특정 형식에 특화된 제네릭 형식의 확장을 지정하려는 경우 해당 표기법을 사용할 수 없다고 생각하지만 표준 .NET 방식으로 할 수 있습니다. 하지만 F # 3.1이 필요합니다 – Gustavo

+0

대단히 감사합니다! 나는 이것을 명심해야한다. – torbonde