【发布时间】:2012-02-04 04:07:23
【问题描述】:
我很难解释两者之间的行为差异 主要隐含值或主隐含值寻求的附加隐含值 隐式转换。具体来说,这是可行的:
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 的错误/限制?
【问题讨论】:
标签: scala polymorphism implicit