2
考慮下面的代碼:我的隱式如何被方法參數遮蔽?
case class W(s:String)
object W{
implicit lazy val w=W("w")
}
trait A{
implicit def a:W=W("a")
}
object B{
def implicitUser(implicit w:W)=println(w.toString)
}
object Auser extends A{
def testa(a:String="0")=B.implicitUser
def testb(b:String="0")=B.implicitUser
}
你怎麼解釋REPL
scala>Auser.testa()
W(w)
scala>Auser.testb()
W(a)
它看起來像在種皮的方法參數名稱下面的輸出防止隱性命名爲的分辨率。 (斯卡拉2.10.3)
這聽起來是對的 - 隱含def a被參數掩蓋,所以它不存在隱式分辨率。 – AmigoNico
令人驚訝,因爲類型不匹配... – Jean