1 回答
TA贡献1798条经验 获得超3个赞
解决方法如下:
所以vertx.eventBus.sendFuture返回一个Future[Message[T]。 Future的onComplete方法采用一个参数,它是一个函数f: (Try[T]) => U。
你在那里做的是你正在使用一个必须完全声明参数类型的匿名函数。
您需要指定签名的签名f。
我猜有两个选择:
1)
vertx.eventBus.sendFuture("anAddress", "message 1").onComplete { x: Try[Message[_]] =>
x match {
case Success(result) => {
println("The handler un-registration has reached all nodes")
}
case Failure(cause) => {
println(s"$cause")
}
}
}
2)
// define f
def f(x: Try[Message[_]]) = x match {
case Success(result) => {
println("The handler un-registration has reached all nodes")
}
case Failure(cause) => {
println(s"$cause")
}
}
// and later use it
vertx.eventBus.sendFuture("anAddress", "message 1").onComplete(f)
=== 稍作编辑以添加简单的解释==
看看附图:
红色的代码实际上是一个没有名字(匿名)的函数体,编译器需要知道它的签名(它的参数和它们的类型)。
这样做.onComplete { ...
或是.onComplete(f)
相同的,但如果您f
在其他地方定义,您已经定义了它的签名。如果没有,你需要这样做.onComplete { x: Try[Message[_]] => ...
。
(小提醒:在 Scala 中你可以这样定义函数val double = (i: Int) => { i * 2 }
)
添加回答
举报