Scala Currying语法解释

Sur*_*aja 2 scala

我是斯卡拉的新手.

我想了解下面代码的语法

object PlainSimple {

 def main(args:Array[String])
 {
 val m = add(5) 
 println(m(3))
 }

 def add(x:Int):Int=>Int =
 {
  y=>y+x 
 }

}
Run Code Online (Sandbox Code Playgroud)

我的问题是我们在哪里说add函数正在返回另一个函数?

什么Int=>Int意思?

在add函数里面叫做y什么?为什么我们在没有声明的情况下使用它呢?

如果想在add方法中添加多行,需要做什么?

Gab*_*lla 6

我的问题是我们在哪里说add函数正在返回另一个函数?

就在这儿

def add(x: Int): Int => Int = y => y + x
Run Code Online (Sandbox Code Playgroud)

Int => Int是一种功能类型.这只是语法糖,但你也可以把它写成

def add(x:Int): Function1[Int, Int] = y => y + x
Run Code Online (Sandbox Code Playgroud)

现在,是什么yy => y + x是一个lambda,即一个匿名函数.这个lambda有一个我们现在称之为的参数y.

这里是scala中匿名函数及其语法的一个很好的参考:http://docs.scala-lang.org/tutorials/tour/anonymous-function-syntax.html

为了在方法中有多行,只需使用大括号

def add(x:Int): Function1[Int, Int] = { y =>
  println("whaveter")  
  y + x
}
Run Code Online (Sandbox Code Playgroud)