当前位置: 首页 > 知识库问答 >
问题:

带参数的Scala传递函数

酆茂才
2023-03-14

将函数传递给另一个函数的Scala示例缺少传递的函数(时间段)接受参数(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))
  }
}

我怎样才能使上述代码工作?

编辑:我在oncepersecond中添加了一个x,以明确目标是传递整数。

共有3个答案

闻人嘉木
2023-03-14

oncePerSecond()=

def oncePerTwo(回调:=

暴绪
2023-03-14

timeFlie返回类型将是Unit,而不是Function。也许您的意思是:

oncePerSecond(() => timeFlies(5))
滕弘新
2023-03-14

这取决于你到底想在哪两种方式来传递论点。第一种方法是让main保持原样。

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)
  }
}

请注意,时间段具有签名(Int)=

这两种方法对不同的用例都很有用。第一种方式让oncePerTwo不必知道回调的参数。第二种方式允许您每次通过循环更改x的值,如果您愿意的话。

 类似资料:
  • 我有下面的<代码> 有些值非常大,最高可达6位。我想编写一个Javascript函数,它将接受子字符串并仅显示前3位数字。 如何编写函数并将参数作为值传递: 我可以用PHP实现,但是我需要用javascript。

  • 看两个例子: a = 1 def fun(a): a = 2 fun(a) print a # 1 a = [] def fun(a): a.append(1) fun(a) print a # [1] 所有的变量都可以理解是内存中一个对象的“引用”,或者,也可以看似c中void*的感觉。 通过id来看引用a的内存地址可以比较理解: a = 1 def fun(a): prin

  • 问题内容: 我有一个功能,它从父级一直到组件层次结构中子级的子级。通常,这不会有太大的问题,但是我需要从孩子那里接收一个参数。我目前收到此错误消息: 这是我正在做的示例代码: 总结一下:我一直将myFunction作为道具传递给,每次单击按钮并从中传递参数时,我都希望将其调用。 谢谢! 问题答案: 我不明白你为什么会得到这个错误,但你应该做的和: Wrapping the function cal

  • 我很好奇在Spark中把一个RDD传递给一个函数到底做了什么。 假设我们如上定义一个函数。当我们调用函数并传递一个现有的RDD[String]对象作为输入参数时,这个my_function是否将这个RDD作为函数参数进行“复制”?换句话说,是按引用调用还是按值调用?

  • Scala 函数 递归函数在函数式编程的语言中起着重要的作用。 Scala 同样支持递归函数。 递归函数意味着函数可以调用它本身。 以上实例使用递归函数来计算阶乘: object Test { def main(args: Array[String]) { for (i <- 1 to 10) println(i + " 的阶乘为: = " + factori

  • 我有一个非常简单的场景可以使用 DI 解决,但我无法找到合适的示例/文档来帮助我完成。我是Scala/Guice世界的新手。 当前组件看起来像这样 现在,我在Foo和Bar之间有一个依赖项。所以,通常代码看起来像这样 其中只是返回。当然,为了简洁起见,我删除了工厂/助手。 我意识到,当我使用“new”时,这已经脱离了DI范式。我希望确保可以基于参数将Bar注入FooImpl。有点像使用工厂。我们如