我有一个函数,它将一个单元回调作为一个参数,即一个接收并返回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
的函数”?
答案 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参数不同。