Могу ли я расширить встроенный индексный указатель массива?
Я хочу добавить свой собственный индекс в общий тип массива:
type 'T``[]`` with
member this.Item(x: string) = 1 // test
Тем не менее, это дает ошибку компиляции. "Ожидается, что выражение должно иметь тип int, но здесь есть строка типа (FS0001)".
let a = [|1|]
let b = a.["aa"] // error: FS0001
let c = a.Item("aa") // this works.
Я нашел этот question, который был задан 3 года назад, и ответ предложил ошибку FSharp. Хотите подтвердить, если это все еще, или была ли спецификация обновлена с тех пор?
Ответы
Ответ 1
На этот вопрос ответил Дон Симе здесь:
Необходимо уточнить спецификацию, что индексы для массивов не могут быть расширены.
Я бы сказал, что предложение разрешить их лучше всего отслеживать через http://fslang.uservoice.com. Тем не менее, это не так просто, потому что индексаторы массива "встроены" в компилятор и не имеют представления метаданных F # или IL.
Поэтому он не поддерживается в Fsharp.