有人可以向我解释为什么以下
/**
* 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"?万分感谢!
答案 0 :(得分:10)
exists
的第二个参数的类型为Int => Boolean
(对吗?),换句话说,它需要一个从Int
到Boolean
的函数。现在,f(x)
并不符合该类型 - 它的类型为Int
。所以 - y => f(y) == x
创建一个具有正确类型的函数,如果其输入等于x
,则返回true。
如果多余的字符让你感到烦恼 - 你也可以使用匿名参数' _'
来缩短它。def map(s: Set, f: Int => Int): Set = x => exists(s, f(_) == x)