我认识到,有在这里大约几个问题是什么钻营和部分应用功能,但我问他们是如何不同.举个简单的例子,这是一个用于查找偶数的curry函数:
def filter(xs: List[Int], p: Int => Boolean): List[Int] =
if (xs.isEmpty) xs
else if (p(xs.head)) xs.head :: filter(xs.tail, p)
else filter(xs.tail, p)
def modN(n: Int)(x: Int) = ((x % n) == 0)
Run Code Online (Sandbox Code Playgroud)
所以你可以编写以下内容来使用它:
val nums = List(1,2,3,4,5,6,7,8)
println(filter(nums, modN(2))
Run Code Online (Sandbox Code Playgroud)
返回:List(2,4,6,8).但我发现我可以用这种方式做同样的事情:
def modN(n: Int, x: Int) = ((x % n) == 0)
val p = modN(2, _: Int)
println(filter(nums, p))
Run Code Online (Sandbox Code Playgroud)
还返回:List(2,4,6,8).
所以我的问题是,两者之间的主要区别是什么,何时使用一个而不是另一个?这是一个过于简单的例子来说明为什么一个人会被用在另一个上面?