scala的函数定义及使用知识点挺多,有类型型变(不变、型变、逆变)知识,有 call-by-name
和call-by-value
使用区别,还有众多特别的语法,下面的示例都将会或多或少的涉及。
Timer方法
Timer方法用于计算一个操作
的结果及耗时时间,操作
可以看做是一个可执行代码块
,返回是一个Tuple
,如何定义呢?这就要涉及到call-by-name
,因为作为输入参数的操作
不应该在传入前就已经执行,否则如何计算执行时间呢?代码如下:
def timer[A](blockCode: =>A) ={
val startTime = System.nanoTime()
val result = blockCode
val stopTime = System.nanoTime()
val delta = stopTime - startTime
(result, delta/1000000d)
}
timer方法接受一个泛型类型参数A,并且是call-by-name调用,因为A前面有个=>符号,该方式称为"惰性"。如果没有该符号,就是call-by-value调用,返回结果是一个二元组(结果,时间)