[英]Implicit keyword before a parameter in anonymous function in Scala
我了解Scala中的隐式参数和隐式转换,但是今天我第一次看到了这一点:匿名函数中参数前面的隐式关键字:
Action { implicit request =>
Ok("Got request [" + request + "]")
}
隐式关键字在这里做什么?
Web上是否有资源描述用例是什么?
这里有两个不同的功能。
首先, request
实际上不是方法调用中的参数。 这是匿名函数的参数。 匿名函数本身是方法调用的参数。
其次,在匿名函数中声明隐式参数具有避免将val“强制”转换为隐式的便利:
Action { request =>
implicit val r = request
Ok("Got request [" + request + "]")
}
我碰巧知道这是一个Play框架代码,但是我不确定Action和Ok的签名是什么。 我猜他们是这样的:
def Action(r:Request => Result):Unit
case class Ok(str:msg)(implicit r:Request)
再次,这纯粹是出于说明目的。
找到了一些资源:
https://issues.scala-lang.org/browse/SI-1492
https://stackoverflow.com/a/5015161/480674
在第二个链接上搜索“闭包中的隐式参数”
在我的理解中,隐式关键字的意思是让编译器完成任务
声明隐式变量意味着可以将其用于范围内其他方法的隐式参数。 换句话说,编译器正在考虑使用变量来填充隐式参数。
def index = Action { implicit request =>
val str = sayHi("Jason")
Ok(views.html.index("Your new application is ready." + str))
}
private def sayHi(name: String)(implicit req: Request[AnyContent]) = name + ", you can the following content" + req.body
我在类型为Request[AnyContent]
sayHi
声明了隐式参数req
,但是,我只能使用第一个参数sayHi("Jason")
调用该方法,因为编译器会填充隐式参数 req
来引用隐式变量 request
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.