我很難解釋 附加隱式值通過主隱式值或隱式轉換尋求的行爲差異。具體來說,這個工作:爲什麼Scala無法在這個特定情況下找到次隱式值?
trait Foo[A]
implicit def fooString: Foo[String] = null
implicit def value[A](implicit foo: Foo[A]) = 5
> implicitly[Int]
5
但這並不:
implicit def conversion[A](x: Int)(implicit foo: Foo[A]) = new {
def aMethod = 5
}
> 1.aMethod
could not find implicit value for parameter foo: test.Foo[A]
變:
- 無論搜索是通過
implicitly
或隱式轉換 - 開始無論是二級隱價值追求是多態的
- 是否提供的二次內含價值是多態的
我得到如下結果:
Conversion/value Searching for Supplied | Works?
---------------- ------------- -------- | ------
conversion poly poly | yes
conversion poly mono | **no**
conversion mono poly | yes
conversion mono mono | yes
value poly poly | yes
value poly mono | yes
value mono poly | yes
value mono mono | yes
正如你所看到的,不工作的唯一情況是當搜索被隱式轉換開始 ,所尋求的值是多態的,但提供的值是單態的。
是否有一個理論上的原因,爲什麼這應該是這種情況,或者這是一個 錯誤/ Scala的限制?
正確的答案,錯誤的問題;-) – 2012-02-04 14:11:43