最佳答案
我意识到这里有几个关于 什么局部套用和部分应用函数的问题,但是我想知道它们是如何不同的。作为一个简单的例子,下面是一个用于查找偶数的 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)
所以你可以写下面的代码来使用它:
val nums = List(1,2,3,4,5,6,7,8)
println(filter(nums, modN(2))
返回: List(2,4,6,8)
。但是我发现我可以这样做:
def modN(n: Int, x: Int) = ((x % n) == 0)
val p = modN(2, _: Int)
println(filter(nums, p))
也返回: List(2,4,6,8)
。
所以我的问题是,这两者之间的主要区别是什么,什么时候你会使用一个而不是另一个?这个例子是否过于简单,无法说明为什么一个例子会被用于另一个例子?