获取并返回Unit的回调

时间:2016-11-11 19:56:04

标签: scala

我有一个函数,它将一个单元回调作为一个参数,即一个接收并返回Unit的回调。如果我像这样定义我的函数:

def myFunction (callback: Unit => Unit) = {
    callback();
}

然后我收到一条警告:Adaptation of argument list by inserting () has been deprecated。在this answer之后,我尝试将代码更改为:

def myFunction (callback: Unit => Unit) = {
    callback;
}

哪个不起作用(我的回调未被调用),或者:

def myFunction (callback: Unit => Unit) = {
    callback (());
}

虽然有效但很难看。有没有办法避免双括号?也许通过将Unit => Unit参数类型更改为其他意味着“不带参数的函数”而不是“带有一个参数或类型Unit的函数”?

3 个答案:

答案 0 :(得分:0)

按名称参数调用

使用call by name参数。名称调用参数只有在按名称显式调用时才会执行。

def myFunction (callback: => Unit) = callback

Scala REPL

scala> def myFunction (callback: => Unit) = callback
myFunction: (callback: => Unit)Unit

scala> myFunction(println("helloworld"))
helloworld

scala> myFunction { println("foo"); println("bar") }
foo
bar

答案 1 :(得分:0)

试试这个:

object CallUnit {
  def main(args: Array[String]) {
    myFunction(cbk)
  }
  def myFunction(callback: => Unit) = {
    callback
  }  
  def cbk {
    println("Call me maybe")
  }
}

答案 2 :(得分:0)

您最有可能寻找的功能是不需要参数。您也不需要在每一行的末尾明确键入;

def myFunction (callback: () => Unit) = callback()

这与call-by-name参数不同。