您的位置:首页 > 产品设计 > UI/UE

call by name 与 call by value in scala

2014-11-12 12:29 387 查看
</pre><pre name="code" class="plain">class NameTest{
def time():Long = {
println("In time()")
System.nanoTime()
}

def exec(t:Long):Long={
println("Enter exec,calling t ...")
println("t:" + t)
println("Calling t again ...")
t
}

def exec2(t: => Long):Long={
println("Enter exec,calling t ...")
println("t:" + t)
println("Calling t again ...")
t
}
}

object NameTest{
def main (args: Array[String]) {
val ab = new NameTest
// call by value -> exec(t:Long)
// 先执行 time(),所以 (1)In time() (2) Enter exec,calling t ... (3)"t: ..." (4) Calling t again ... (5) t:
// (3)'time equals to (5)'time
println(ab.exec(ab.time()))

// call by name -> exec2(t: => Long)
//延后执行参数方法,先执行本方法
// 先执行 exec2(),到真正调用 time() 再执行
// 所以 (1)Enter exec,calling t ... (2)In time() (3)"t: ..." (4)  Calling t again ...  (5) t:
// (3)'time differ from (5)'time
println(ab.exec2(ab.time()))
}
}
exec() 的执行结果
In time()Enter exec,calling t ...t:1723672175961427Calling t again ...1723672175961427
<pre name="code" class="plain">exec2() 的执行结果
Enter exec,calling t ...In time()t:1723706117217764Calling t again ...In time()1723706117317442

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: