[英]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.