Небольшая разница в типах - PullRequest
11 голосов
/ 23 февраля 2011

У меня есть три функции, которые должны быть равны:

let add1 x = x + 1
let add2 = (+) 1
let add3 = (fun x -> x + 1) 

Почему типы этих методов различаются?
add1 и add3 равны int -> int, но add2 равно (int -> int).Все они работают, как и ожидалось, мне просто интересно, почему FSI представляет их по-разному?

1 Ответ

16 голосов
/ 23 февраля 2011

Как правило, это неважное различие, но если вам действительно любопытно, см. Раздел Соответствие Arity для значений спецификации F #.

Мое краткое резюме будет таким: (int -> int) является надмножеством int -> int.Поскольку add1 и add3 являются синтаксическими функциями, они имеют более конкретный тип int -> int, тогда как add2 является значением функции и, следовательно, имеют тип (int -> int) (и не могут рассматриваться какint -> int).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...