簡體   English   中英

Scala中匿名函數中參數之前的隱式關鍵字

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM