F #, используя оператор. [] Как функцию - PullRequest
0 голосов
/ 24 января 2019

F # позволяет рассматривать большинство операторов как функции. Например:

let f = (+)
f 1 2 // <- 3

Однако я не уверен, возможно ли заставить этот же синтаксис работать с оператором индекса (.[...]).

Я пробовал:

let f = (.[])
f [| 1 |] 0 

Ни один из типов 'int [], int' не поддерживает оператор '. []' (С использованием внешнего компилятора F #)

И

let f = (.[])
f  0 [| 1 |]

Ни один из типов int, a [] не поддерживает оператор. [] (С использованием внешнего компилятора F #)

Я предполагаю, что .[...] на самом деле не оператор, а специальный встроенный синтаксис, который нельзя использовать функционально, но, возможно, я что-то упустил. Можно ли использовать индекс оператора так же, как вы обычно используете функцию, подобную Array.get?

1 Ответ

0 голосов
/ 24 января 2019

У меня нет хорошего ответа, но у меня есть одно потенциально полезное наблюдение.При попытке определить что-то вроде этого:

let (.[,]) v1 v2 = v1 + v2

Появляется сообщение об ошибке:

ошибка FS0035: эта конструкция устарела: обработка этого оператора теперь обрабатывается напрямуюс помощью компилятора F # и его значение не может быть переопределеноневозможно), но, как следует из сообщения об ошибке, теперь это, вероятно, делается по-другому.Я не уверен, почему это не относится к .[], хотя!

Эти имена операторов в стиле фанк появляются в нескольких местах в исходном коде компилятора F # .

...