加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Scala传递函数与参数

发布时间:2020-12-16 09:12:03 所属栏目:安全 来源:网络整理
导读:将函数传递给另一个函数的 Scala示例缺少传递函数(timeFlies)接受参数(x)的情况. object Timer { def oncePerSecond(callback: (Int) = Unit) { while (true) { callback(x); Thread sleep 1000 } } def timeFlies(x: int) { println("time flies like an ar
将函数传递给另一个函数的 Scala示例缺少传递函数(timeFlies)接受参数(x)的情况.

object Timer {
  def oncePerSecond(callback: (Int) => Unit) {
    while (true) { callback(x); Thread sleep 1000 }
  }
  def timeFlies(x: int) {
    println("time flies like an arrow...")
  }
  def main(args: Array[String]) {
    oncePerSecond(timeFlies(5))
  }
}

如何使上述代码工作?

编辑:我在一次增加一个x,以澄清目标是传递整数.

解决方法

至少有两种方法可以做到这一点,这取决于你想要传递参数的位置.第一种方式是你像主持人那样保持主的位置.

object Timer {
  def oncePerSecond(callback: => Unit) {
    while (true) { callback; Thread sleep 1000 }
  }
  def timeFlies(x: Int) {
    println("time flies like an arrow...")
  }
  def main(args: Array[String]) {
    oncePerSecond(timeFlies(5))
  }
}

另一种方法是在回调点传递参数,如下所示:

object Timer {
  def oncePerSecond(callback: (Int) => Unit) {
    val x = 5
    while (true) { callback(x); Thread sleep 1000 }
  }
  def timeFlies(x: Int) {
    println("time flies like an arrow...")
  }
  def main(args: Array[String]) {
    oncePerSecond(timeFlies)
  }
}

请注意,timeFlies具有签名(Int)=>单位,但是timeFlies(5)的签名=>单位,因为partial application.这基本上意味着你可以应用参数来自动创建一个需要较少参数的函数.如果您已经将Int参数应用于回调,那么oncePerSecond需要在其签名中知道.

这两种方法对于不同的用例都是有用的.第一种方式让一次性不需要知道回调参数.第二种方式可以让您每次通过循环更改x的值.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读