Scala:为什么在咖喱中,我们可以省略参数?

Scala:为什么在咖喱中,我们可以省略参数?,scala,Scala,我有一个如下所示的程序,例如使用sumx=>x1,2,我可以毫无问题地运行它 我不明白的是,为什么我们可以在最后一行写sumF,而不带参数?我找不到关于这个的解释 谢谢 def sum(f: Int => Int) : (Int, Int) => Int = { def sumF(a:Int, b:Int) : Int = { if (a > b) 0 else f(a) + sumF(a + 1, b) } sumF } sum函数的返回值是类型

我有一个如下所示的程序,例如使用sumx=>x1,2,我可以毫无问题地运行它

我不明白的是,为什么我们可以在最后一行写sumF,而不带参数?我找不到关于这个的解释

谢谢

def sum(f: Int => Int) : (Int, Int) => Int = {
  def sumF(a:Int, b:Int) : Int = {
    if (a > b) 0
    else f(a) + sumF(a + 1, b)
  }
  sumF
}
sum函数的返回值是类型为的函数

(Int, Int) => Int
这就是sumF

在Scala中,如果没有返回,则最后一个表达式将作为返回值。因此,如果最后一个表达式是您想要返回的,那么您可以省略return关键字

你看到的是一个高阶函数。sum是一个函数,它接受函数f作为参数,并返回一个arity 2函数,该函数接受2个整数,并返回一个整数,该整数是sumF的确切类型签名

求和函数的返回值是类型的函数

(Int, Int) => Int
这就是sumF

在Scala中,如果没有返回,则最后一个表达式将作为返回值。因此,如果最后一个表达式是您想要返回的,那么您可以省略return关键字


你看到的是一个高阶函数。sum是一个函数,它接受函数f作为参数,并返回一个arity 2函数,该函数接受2个整数,并返回一个整数,该整数是sumF的确切类型签名

如果你看到我们是如何调用sun函数的,你就会知道我们没有忽略a和b作为1,2的参数,sum的返回类型是sumF类型的函数,那么混淆在哪里?如果你看到我们如何调用sun函数,你就会知道我们没有忽略a和b的参数由于1,2和sum的返回类型是sumF类型的函数,那么有什么混淆呢?我过去认为sumF是尾部递归sumF不使用尾部递归,你需要重新编写代码一点。我过去认为sumF是尾部递归sumF不使用尾部递归,你需要重新编写代码一点。