2013-08-21 6 views
6

Sau this question Tôi tự hỏi làm thế nào (hoặc nếu) tôi có thể mở rộng loại F # Array chung. Tôi có thể làm điều này:F # làm thế nào để mở rộng loại mảng chung?

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

nhưng như Tomas đã đề cập không chung chung. Tiếp theo, tôi cố gắng này, nhưng nó không hoạt động:

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

Trong F # scource tôi thấy không gian tên này, nhưng nó không hoạt động hoặc là:

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

Trả lời

16

Đây là một chút bối rối - nhưng tôi đã gần đây tìm kiếm cái gì trong F # đặc điểm kỹ thuật và tình cờ gặp này:

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

[| 1 .. 10 |].Last 

mã hóa đúp backtick thường được sử dụng để biến các từ khóa dành riêng vào F # định danh hợp lệ (ví dụ như nếu bạn muốn có một Thuộc tính y có khoảng trống trong tên hoặc được đặt tên là let). Ở đây, nó có thể có nghĩa là trình biên dịch cần xử lý [] như một kiểu "tên" bình thường hơn là một cú pháp đặc biệt cho các mảng.