2013-06-07 42 views
6

Trong số previous question Tôi đã học được rằng trong F # an array<'T> không giống như System.Array.F # - Mảng <'T> là gì?

VS cho tôi biết rằng array<'T> kế thừa System.Array và có tên đầy đủ Microsoft.FSharp.Core.array<_> và một số Giao diện bổ sung.

Tuy nhiên MSDN nói rằng array<'T> là tên viết tắt của System.Array. Và nó có ký hiệu arr.[i] để nhận và đặt các mục.

Vì vậy, đối với bài học của tôi, là array<'T> một từ viết tắt loại bao gồm các loại mở rộng và giao diện bổ sung? Đâu là nơi tốt nhất để tìm kiếm điều này?

Trả lời

10

Loại array<'T> là viết tắt, nhưng không phải cho loại cơ sở System.Array nhưng đối với loại chung khác đại diện cho mảng trong F #, được viết là 'T[].

Điều này có nghĩa rằng

  • System.Array là loại cơ sở phi generic (nơi bạn không thể sử dụng lập chỉ mục và bạn chỉ có thể nhận được các yếu tố như các đối tượng)

  • 'T[]array<'T> nghĩa chính xác những điều tương tự . Họ là loại chung hỗ trợ lập chỉ mục và bạn nhận được các giá trị 'T từ đó.

+1

Cũng lưu ý rằng các loại chung có thể được viết trước loại và không có dấu ngoặc nhọn, vì vậy bạn có thể viết, ví dụ, 'chuỗi mảng' đọc rất đẹp; đẹp hơn 'mảng ' hoặc 'chuỗi []'. – Jwosty

+0

làm cách nào để tạo các loại mở rộng trên '[]'? 'loại Microsoft.FSharp.Collections.Array với thành viên arr.last with get() = arr. [arr.Length -1]' không hoạt động cho tôi – Goswin

+0

cho phần mở rộng kiểu xem: http://stackoverflow.com/questions/18359825/f-how-to-extended-the-generic-array-type – Goswin