我是scala的新手。
我想了解下面这段代码的语法
object PlainSimple {
def main(args:Array[String])
{
val m = add(5)
println(m(3))
}
def add(x:Int):Int=>Int =
{
y=>y+x
}
}
我的问题是我们在哪里说add函数正在返回另一个函数?
Int=>Int
是什么意思?
在add函数里面有什么叫y
?为什么我们在没有声明的情况下使用它呢?
如果想在add方法中添加多行,需要做什么?
答案 0 :(得分:6)
我的问题是我们在哪里说add函数正在返回另一个函数?
就在这里
def add(x: Int): Int => Int = y => y + x
Int => Int
是一种函数类型。这只是语法糖,但你也可以把它写成
def add(x:Int): Function1[Int, Int] = y => y + x
现在,y
是什么? y => 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
}
答案 1 :(得分:2)
我的问题是我们在哪里说add函数正在返回另一个函数?
什么是Int => Int表示?
T => U
作为一种类型意味着“一个需要T
并返回U
”的函数。因此,当我们在函数签名的末尾写: Int => Int
时,我们说“此函数返回从Int
到Int
的函数”。
在add函数里面叫做y?为什么我们在没有声明的情况下使用它呢?
作为表达式x => body
(或多个参数的(x,y,z) => body
)是函数文字,即它定义了一个匿名函数,其参数名为x
,其正文为{{1 }}。因此,我们通过写出body
左侧的名称来声明参数x
。
如果想在add方法中添加多行,需要做什么?
在使用=>
定义方法时,您可以在=>
右侧放置任何可以放在=
右侧的内容。因此,如果您希望函数的主体由多个语句组成,则可以像使用常规方法定义一样使用大括号:
def