“Functions call by name”的版本间差异

本页内容
(创建页面,内容为“{{DISPLAYTITLE:函数传名调用(Call-by-Name)}}1 = Scala 函数传名调用(call-by-name) = Scala 函数 Scala的解释器在解析函数参数(function arguments)时有两种方式: * 传值调用(call-by-value):先计算参数表达式的值,再应用到函数内部; * 传名调用(call-by-name):将未计算的参数表达式直接应用到函数内部 在进入函数内部前,传值…”)
 
Neo讨论 | 贡献
无编辑摘要
 
第13行: 第13行:
这就造成了一种现象,每次使用传名调用时,解释器都会计算一次表达式的值。
这就造成了一种现象,每次使用传名调用时,解释器都会计算一次表达式的值。


<sample title="" desc="" lang="scala" hererun="1">
<pre>
object Test {
object Test {
   def main(args: Array[String]) {
   def main(args: Array[String]) {
第20行: 第20行:


   def time() = {
   def time() = {
       println("获取时间,单位为纳秒")
       println(&quot;获取时间,单位为纳秒&quot;)
       System.nanoTime
       System.nanoTime
   }
   }
   def delayed( t: => Long ) = {
   def delayed( t: =&gt; Long ) = {
       println("在 delayed 方法内")
       println(&quot;在 delayed 方法内&quot;)
       println("参数: " + t)
       println(&quot;参数: &quot; + t)
       t
       t
   }
   }
}
}
</sample>
</pre>
以上实例中我们声明了 delayed 方法, 该方法在变量名和变量类型使用 =&gt; 符号来设置传名调用。执行以上代码,输出结果如下:
以上实例中我们声明了 delayed 方法, 该方法在变量名和变量类型使用 =&gt; 符号来设置传名调用。执行以上代码,输出结果如下:


<sample title="" desc="" lang="scala" hererun="1">
<pre>
$ scalac Test.scala
$ scalac Test.scala
$ scala Test
$ scala Test
第39行: 第39行:
参数: 241550840475831
参数: 241550840475831
获取时间,单位为纳秒
获取时间,单位为纳秒
</sample>
</pre>
实例中 delay 方法打印了一条信息表示进入了该方法,接着 delay 方法打印接收到的值,最后再返回 t。
实例中 delay 方法打印了一条信息表示进入了该方法,接着 delay 方法打印接收到的值,最后再返回 t。


[[scala functions|Scala 函数]]
[[scala functions|Scala 函数]]

2022年10月14日 (五) 16:51的最新版本

Scala 函数传名调用(call-by-name)

Scala 函数

Scala的解释器在解析函数参数(function arguments)时有两种方式:

  • 传值调用(call-by-value):先计算参数表达式的值,再应用到函数内部;
  • 传名调用(call-by-name):将未计算的参数表达式直接应用到函数内部

在进入函数内部前,传值调用方式就已经将参数表达式的值计算完毕,而传名调用是在函数内部进行参数表达式的值计算的。

这就造成了一种现象,每次使用传名调用时,解释器都会计算一次表达式的值。

object Test {
   def main(args: Array[String]) {
        delayed(time());
   }

   def time() = {
      println("获取时间,单位为纳秒")
      System.nanoTime
   }
   def delayed( t: => Long ) = {
      println("在 delayed 方法内")
      println("参数: " + t)
      t
   }
}

以上实例中我们声明了 delayed 方法, 该方法在变量名和变量类型使用 => 符号来设置传名调用。执行以上代码,输出结果如下:

$ scalac Test.scala
$ scala Test
在 delayed 方法内
获取时间,单位为纳秒
参数: 241550840475831
获取时间,单位为纳秒

实例中 delay 方法打印了一条信息表示进入了该方法,接着 delay 方法打印接收到的值,最后再返回 t。

Scala 函数

此页面最后编辑于2022年10月14日 (星期五) 16:51。