参数中的 =>U 和 ()=>U

在scala参数中会遇到=>U 或者 ()=>U。U表示返回值类型。简单说下二者的区别。

  • =>U是一个传名参数,表示一个无参方法。
  • ()=>U则是一个函数。

举个例子,看一下二者的区别:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
object MyApp extends App with Logging {

def mTime: Long = System.currentTimeMillis()

val fTime = () => System.currentTimeMillis()

def job(t1: => Long, t2: () => Long) = {
for (i <- 0 to 3) {
println(s"start time: $t1")
println(s" end time: ${t2()}")
TimeUnit.SECONDS.sleep(1L)
println("------------------------------------------------------------")
}
}

job(mTime, fTime)

}

从代码中可以看出二者的区别:

  • 定义上,传名参数用def定义,函数使用val定义,且传名参数方法要求参数为空
  • 使用时,虽然二者都是调用时再进行计算,但是函数需要加上“()”转为方法再调用,传名参数本身即是方法不需要转

关于方法和函数的关系可以参考之前的一篇文

还有篇关于传名参数的文:传名参数