Scala 这两个高阶函数有何不同?
以下两个高阶函数产生相同的结果,但我很难理解两者之间的区别。事实上,我不明白。一个函数如何具有两组Scala 这两个高阶函数有何不同?,scala,Scala,以下两个高阶函数产生相同的结果,但我很难理解两者之间的区别。事实上,我不明白。一个函数如何具有两组() (一) (二) 第一个函数是curry。这意味着您可以更轻松地部分应用它。如果只使用第一个参数列表,该函数将返回另一个签名为(Int,Int)=>Int的函数 如果您需要将具有特定函数签名的函数传递给更高阶的函数,如map或reduce,这将非常有用 在其他函数式编程语言(如Haskell)中,默认情况下所有函数都是curry。 如果你感兴趣的话,我就这个话题写了一整篇博文。您可以阅读它Sca
()
(一)
(二)
第一个函数是curry。这意味着您可以更轻松地部分应用它。如果只使用第一个参数列表,该函数将返回另一个签名为
(Int,Int)=>Int
的函数
如果您需要将具有特定函数签名的函数传递给更高阶的函数,如map
或reduce
,这将非常有用
在其他函数式编程语言(如Haskell)中,默认情况下所有函数都是curry。
如果你感兴趣的话,我就这个话题写了一整篇博文。您可以阅读它Scala函数可以有多个参数列表(如您第一次定义的
sum
)。你能发布你的博客链接吗?只有2)是高阶函数。1)不是吗?1) 是否改为Curry?不,高阶函数是将函数作为参数的函数,如map
、filter
或reduce
。因此,2)是一个正常函数,1)是相同的函数,但为curry.:)更正,1)和2)都是高阶函数,但只有1)是curry:)
def sum(f: Int => Int) (a: Int, b: Int) = {
def loop(a: Int, acc: Int) : Int =
if (a > b) acc
else loop (a + 1, f(a) + acc)
loop (a, 0)
}
def sum(f: Int => Int, a: Int, b: Int) = {
def loop(a: Int, acc: Int) : Int =
if (a > b) acc
else loop (a + 1, f(a) + acc)
loop (a, 0)
}