2016-06-29 2 views
5

Может кто-нибудь любезно объяснить мне, почему следующеефункция Scala => в качестве параметра

/** 
    * Returns a set transformed by applying `f` to each element of `s`. 
    */ 
    def map(s: Set, f: Int => Int): Set = x => exists(s, y => f(y) == x) 

не эквивалентно

def map(s: Set, f: Int => Int): Set = x => exists(s, f(x)) 

где «существует» это функция, которая возвращает, существует ли ограниченная целое число в пределах s (первый аргумент), который удовлетворяет p (второй аргумент).

Зачем вам нужно указывать «y => f (y) == x»? Бесконечно благодарен! Второй аргумент

ответ

10

exists «S имеет тип Int => Boolean (правильно?), другими словами, он ожидает, что функция от Int к Boolean. Теперь f(x) не соответствует этому типу - он имеет тип Int. Итак - создает функцию с правильным типом, которая возвращает true, если ее вход равен x.

Если лишние символы ошибку вы - вы можете сократить его немного с помощью анонимный аргумент «_»:

def map(s: Set, f: Int => Int): Set = x => exists(s, f(_) == x) 
+0

Моя догадка, что ОП был смущен, думая о 'х => существует (s, _ == f (x)) 'который проверяет тип (к сожалению, поскольку' f' имеет не самый общий тип), но делает неправильную вещь. – chi

+0

получил это, Цах Зоар, большое вам спасибо! – iammyr

Смежные вопросы