我可以扩展内置数组的索引器吗?

tre*_*k42 10 f#

我想将自己的索引器添加到通用数组类型:

type 'T``[]`` with
    member this.Item(x: string) = 1  // test
Run Code Online (Sandbox Code Playgroud)

但是,这会产生编译错误"表达式应该具有int类型,但这里有类型字符串(FS0001)."

let a = [|1|]
let b = a.["aa"]      // error: FS0001
let c = a.Item("aa")  // this works.
Run Code Online (Sandbox Code Playgroud)

我发现这个问题是3年前提出的,答案表明这是一个FSharp错误.想确认是否仍然如此,或者说那时规格是否已更新?

tre*_*k42 1

我在这里得到了 Don Syme 的回答:

规范需要澄清的是,数组的索引器可能无法扩展。

我想说最好通过http://fslang.uservoice.com跟踪允许它们的建议。也就是说,做到这一点并不简单,因为数组索引器是“内置”到编译器中的,并且没有 F# 或 IL 元数据表示。

所以 Fsharp 不支持它。