F # Оператор / Функция Путаница - PullRequest
6 голосов
/ 03 августа 2010

Я только начинаю на F #, и когда я играю с перегрузкой операторов, я сталкиваюсь с тем, что не совсем понимаю.Теперь я понимаю, что вы не можете использовать, например, +* в качестве перегруженного префиксного оператора;это может быть только инфиксный оператор.Однако вот где я запутался:

let (+*) a = a + a * a;;

Если я запусту это, fsi сообщит мне, что функция (+*) является int->int.Отлично, я могу это понять - это не перегруженный оператор, а обычная функция с именем (+*).Так что, если я сделаю:

printf "%d" ((+*) 6)

Я получу 42, как я ожидаю.Однако, если я попытаюсь:

printf "%d" (+*) 6
or
printf "%d" (+*)6

Это не скомпилируется.Я не могу сообщить точную ошибку прямо сейчас, поскольку у меня нет доступа к компилятору F # в данный момент, но почему это так?Что здесь происходит с переплетом?

1 Ответ

7 голосов
/ 03 августа 2010

Это интерпретирует это:

printf "%d" (+*) 6

Как это:

printf ("%d") (+*) (6)

Другими словами, передавая три карри аргумента printf, второй из которых является ссылкой на функцию +*.

...