我很难解释主隐值或隐式转换所寻求的附加隐值之间的行为差异。具体而言,这起作用是:
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:16
发布于 2012-02-04 11:10:23
以下列方式更改隐式转换的签名:
implicit def conversion[A](a: A)(implicit foo: Foo[A]) = new {然后对定义了隐式值的类型的值(即使用字符串)调用aMethod。
scala> "foo".aMethod
res0: Int = 5https://stackoverflow.com/questions/9138312
复制相似问题