遵循播放 websocket 示例 http://www.playframework.com/documentation/2.3.x/ScalaWebSockets我遇到了一个奇怪的问题。
文档中的以下示例正在运行:
Future.successful(request.session.get("user") match {
case None => Left(Forbidden)
case Some(_) => Right(out => ChannelActor.props(out, "", ""))
})
为了理解代码,我尝试使用代码:
Future.successful({
val test = request.session.get("user") match {
case None => Left(Forbidden)
case Some(_) => Right(out => ChannelActor.props(out, "", ""))
}
test
})
编译器抱怨该值存在“缺少参数类型”out
.
这是为什么?我刚刚在测试中添加了保存的 Either 并返回了这个 val 而不是 match 语句本身。
thanks
原因是Scala编译器无法推断出类型out
。你永远不会告诉编译器(或读者)什么类型out
实际上是。可以看到它是一个函数返回类型Props
,但从未指定其输入是什么类型。因此,您可以从此代码中派生的类型信息只是Future[Either[Result, ??? => Props]
.
您通过注释此处理函数解决了这个问题val handler: HandlerProps
这是一个别名val handler: ActorRef => Props
。因此,通过使用类型信息对其进行注释,您可以为 Scala 编译器提供足够的类型信息来编译它。您也可以通过编写来做到这一点Right(out: ActorRef => ChannelActor.props(out, "", ""))
,或写作val test: Either[Result, HandlerProps] = ... match {
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)