关注this question我想知道如何(或者如果)我可以扩展通用F#数组类型。 我能做到这一点:
type System.Array with
member a.Last = a.GetValue(a.Length - 1)
但正如托马斯所说,它是非通用的。接下来我尝试了这个,但它不起作用:
type Microsoft.FSharp.Collections.Array with // Error: Array is not defined
member a.Last = a.[a.Length - 1]
在F#scource中我找到了这个命名空间,但它也不起作用:
type Microsoft.FSharp.Primitives.Basics.Array with // Error: Array is not defined
member a.Last = a.[a.Length - 1]
答案 0 :(得分:17)
这有点令人困惑 - 但我最近在寻找F#规范中的内容并遇到了这个问题:
type 'T ``[]`` with
member a.Last = a.[a.Length - 1]
[| 1 .. 10 |].Last
双重反引号编码通常用于将保留关键字转换为有效的F#标识符(例如,如果您希望某个属性在名称中有空格,或者名为let
)。在这里,它可能意味着编译器需要将[]
视为普通类型“名称”而不是数组的特殊语法。