首页 > 其他分享 >无涯教程-Scala - Functions Call-by-Name函数

无涯教程-Scala - Functions Call-by-Name函数

时间:2024-01-26 22:31:48浏览次数:29  
标签:Functions Name scala Demo Scala delayed time 呼叫 函数

通常,函数的参数是按值参数;也就是说,参数的值是在传递给函数之前确定的。但是,如果我们需要编写一个函数,该函数接受在函数中被调用之前不希望对其求值的表达式作为参数,该怎么办?在这种情况下,Scala提供了按姓名呼叫参数。

按名称的呼叫机制将代码块传递给该呼叫,并且每次该呼叫访问该参数时,都会执行该代码块并计算值。在这里,delay打印一条消息,表明已输入该方法。接下来,延迟打印一条带有其值的消息。最后,延迟回报为" t"。

以下程序显示了如何实现按名称呼叫。

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

   def time()={
      println("Getting time in nano seconds")
      System.nanoTime
   }
   def delayed( t: => Long )={
      println("In delayed method")
      println("Param: " + t)
   }
}

将上述程序保存在 Demo.scala 中。以下命令用于编译和执行该程序。

命令

\>scalac Demo.scala
\>scala Demo

输出

In delayed method                                                             
Getting time in nano seconds                                                  
Param: 2027245119786400 

参考链接

https://www.learnfk.com/scala/functions-call-by-name.html

标签:Functions,Name,scala,Demo,Scala,delayed,time,呼叫,函数
From: https://blog.51cto.com/u_14033984/9438918

相关文章

  • 6-Nameless Representation of Terms
    无名称项deBruijn使用自然数来表示项,而不是字母组成的名称;自然数k表示绑定于第k个λ层的被界定的变量(thevariableboundbythek'thenclosingλ)马世龙版《类型和程序设计语言》使用“囿”来形容这种被界定的关系举例来说:λx.x表示为λ.0λx.λy.x(yx)表示......
  • 无涯教程-Scala - do-while 循环函数
    与while循环在循环顶部测试循环条件不同,do-while循环在循环底部检查其条件,do-while循环与while循环相似,除了保证do-while循环至少执行一次do-while-语法以下是do-while循环的语法。do{statement(s);}while(condition);do-while-流程图尝试使用以下示例......
  • 无涯教程-Scala - while 循环函数
    在给定条件为真时重复一个语句或一组语句,它在执行循环体之前判断条件,只要给定条件为真,while循环语句就会重复执行目标语句。while-语法以下是while循环的语法。while(condition){statement(s);}while-流程图while-示例objectDemo{defmain(args:Array[......
  • 无涯教程-Scala - 文件I/O
    Scala开放使用任何Java对象,java.io.File是可在Scala编程中用于读取和写入文件的对象之一。importjava.io._objectDemo{defmain(args:Array[String]){valwriter=newPrintWriter(newFile("test.txt"))writer.write("HelloScala")writer......
  • 无涯教程-Scala - 提取器
    Scala中的提取器Extractors是一个对象,该对象具有称为unapply的方法,该方法的目的是匹配值并将其拆开。让我们以对象定义apply和unapply方法为示例,apply方法的含义与以往相同:它将Test变成一个对象,该对象可以以与应用方法相同的方式应用于括号中的参数。因此,您可以编写Te......
  • 无涯教程-Scala - 异常处理
    Scala的异常与Java之类的许多其他语言中的异常一样工作,方法可以通过引发异常来终止,但是,Scala实际上没有检查过的异常。当您要处理异常时,可以像在Java中一样使用try{...}catch{...}块,只是catch块使用匹配来识别和处理异常。抛出异常引发异常看起来与Java中相同,创建一个异常......
  • 无涯教程-Scala - 正则表达式
    本章介绍Scala如何通过scala.util.matching包中提供的Regex类支持正则表达式。尝试下面的示例程序,我们将尝试从语句中找出单词Scala。importscala.util.matching.RegexobjectDemo{defmain(args:Array[String]){valpattern="Scala".rvalstr="Sc......
  • 无涯教程-Scala - 模式匹配
    在函数值和闭包之后,模式匹配是Scala第二广泛使用的函数,Scala在处理消息时为模式匹配提供了强大的支持。Pattern-示例objectDemo{defmain(args:Array[String]){println(matchTest(3))}defmatchTest(x:Int):String=xmatch{case1=>......
  • 无涯教程-Scala - 特性(Traits)
    Traits封装了方法和字段定义,然后可以通过混合到类中来重用它们。与类继承不同,一个类可以混合任意数量的traits。traits定义看起来类似于类定义,只是它使用关键字trait。以下是trait的基本示例语法。Traits-语法traitEqual{defisEqual(x:Any):BooleandefisNot......
  • 无涯教程-Scala - 数组(Arrays)
    Scala提供了一种数据结构数组,它存储了相同类型元素的固定大小的顺序集合。声明数组要在程序中使用数组,必须声明一个变量以引用该数组,并且必须指定该变量可以引用的数组的类型。varz:Array[String]=newArray[String](3)orvarz=newArray[String](3)在此,z被声明为可容......