亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Scala 編譯錯誤 Vert.x 響應未來

Scala 編譯錯誤 Vert.x 響應未來

江戶川亂折騰 2023-03-31 14:39:10
我正在嘗試從https://vertx.io/docs/vertx-core/scala/#_the_event_bus_api復制代碼,但出現編譯錯誤。override def start(): Unit = {    vertx.eventBus.sendFuture("anAddress", "message 1").onComplete {      case Success(result) => {        println("The handler un-registration has reached all nodes")      }      case Failure(cause) => {        println(s"$cause")      }    }  }我收到此錯誤:missing parameter type for expanded functionThe argument types of an anonymous function must be fully known. (SLS 8.5)Expected type was: scala.util.Try[io.vertx.scala.core.eventbus.Message[?]] => ?    vertx.eventBus.sendFuture("anAddress", "message 1").onComplete {                                                                   ^我該如何解決這個問題?我正在使用 Scala 2.12.8 和 Vert.x 3.7.1我環顧四周但沒有成功。感謝提前!
查看完整描述

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)

=== 稍作編輯以添加簡單的解釋==


看看附圖:

http://img1.sycdn.imooc.com//642680380001260006560223.jpg

紅色的代碼實際上是一個沒有名字(匿名)的函數體,編譯器需要知道它的簽名(它的參數和它們的類型)。

這樣做.onComplete { ...或是.onComplete(f)相同的,但如果您f在其他地方定義,您已經定義了它的簽名。如果沒有,你需要這樣做.onComplete { x: Try[Message[_]] => ...。

(小提醒:在 Scala 中你可以這樣定義函數val double = (i: Int) => { i * 2 }


查看完整回答
反對 回復 2023-03-31
  • 1 回答
  • 0 關注
  • 167 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號