为了账号安全,请及时绑定邮箱和手机立即绑定

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)

=== 稍作编辑以添加简单的解释==


看看附图:

//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 关注
  • 122 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信