1 回答

TA貢獻(xiàn)1798條經(jīng)驗(yàn) 獲得超3個贊
解決方法如下:
所以vertx.eventBus.sendFuture返回一個Future[Message[T]。 Future的onComplete方法采用一個參數(shù),它是一個函數(shù)f: (Try[T]) => U。
你在那里做的是你正在使用一個必須完全聲明參數(shù)類型的匿名函數(shù)。
您需要指定簽名的簽名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)
=== 稍作編輯以添加簡單的解釋==
看看附圖:
紅色的代碼實(shí)際上是一個沒有名字(匿名)的函數(shù)體,編譯器需要知道它的簽名(它的參數(shù)和它們的類型)。
這樣做.onComplete { ...
或是.onComplete(f)
相同的,但如果您f
在其他地方定義,您已經(jīng)定義了它的簽名。如果沒有,你需要這樣做.onComplete { x: Try[Message[_]] => ...
。
(小提醒:在 Scala 中你可以這樣定義函數(shù)val double = (i: Int) => { i * 2 }
)
添加回答
舉報