scala中“=>”的应用场景
1、表示函数的返回类型
def main(args: Array[String]): Unit = {
//定义一个函数变量
var x: (Int) => Int = test
var x2: (Int) => String = test2
println(x(2)) // 4
println(x2(2)) // 2trx
}
def test(x: Int) = x * 2
def test2(x: Int) = x+"trx"
(Int)=>Int、(Int)=>String 左边是参数类型,右边是返回值类型。
2、匿名函数
def main(args: Array[String]): Unit = {
// 定义一个匿名函数
var fun = (x: Int) => x * 2
println(fun(10)) // 20
}
匿名函数定义, 左边是参数 右边是函数实现体 (x: Int)=>{}
3、case语句
def main(args: Array[String]): Unit = {
val x = 10
val y = 10
val value = x + y match {
case 20 => x
case 30 => y
}
print(value)
}
在模式匹配 match 和 try-catch 都用 “=>” 表示输出的结果或返回的值
4、By-Name Parameters(传名参数)
传名参数在函数调用前表达式不会被求值,而是会被包裹成一个匿名函数作为函数参数传递下去,例如参数类型为无参函数的参数就是传名参数。
object SayHello {
def main(args: Array[String]): Unit = {
println("传值调用:")
delayed0(time())
println("===================")
println("传名调用:")
delayed(time())
println("===================")
}
def time() = {
println("获取时间,单位为纳秒")
System.nanoTime
}
def delayed0(t : Long)={
println("在 delayed0 方法内")
println("参数"+t)
t
}
def delayed(t: => Long) = { //重点在这
println("在 delayed 方法内")
println("参数: " + t)
t
}
}