(斯卡拉2.11.8)斯卡拉類型類的隱式解析
考慮下面的代碼:
object ScalaTest extends App {
class Wrapper {
import Wrapper._
def init(): Unit = {
// "could not find implicit value for parameter tc: ScalaTest.Wrapper.TC[Int]"
printWithTC(123)
// Compiles
printWithTC(123)(IntTC)
// Compiles again!
printWithTC(132)
}
}
object Wrapper {
trait TC[A] {
def text(a: A): String
}
implicit object IntTC extends TC[Int] {
override def text(a: Int) = s"int($a)"
}
def printWithTC[A](a: A)(implicit tc: TC[A]): Unit = {
println(tc.text(a))
}
}
(new Wrapper).init()
}
我有一堆關於這段代碼的問題:
- 爲什麼沒有按」 t
IntTC
首先得到解決? - 爲什麼使用一次後編譯? (如果您註釋掉第一個調用,代碼有效)
- 應該將typeclass implicits放在哪裏才能正確解析?
我不知道發生了什麼,但只是注意到,如果您將對象移到課前,代碼也會編譯。 – Dima