call by name 与 call by value in scala

来源:互联网 发布:nat123 80端口 免费 编辑:程序博客网 时间:2024/04/30 02:35
</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


0 0