相关疑难解决方法(0)

为什么Scala在这个特定情况下找不到二级隐含值?

我很难解释主要隐式值或隐式转换所寻求的其他隐式值之间的行为差​​异.具体来说,这有效:

trait Foo[A]
implicit def fooString: Foo[String] = null

implicit def value[A](implicit foo: Foo[A]) = 5

> implicitly[Int]
5
Run Code Online (Sandbox Code Playgroud)

但这不是:

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]
Run Code Online (Sandbox Code Playgroud)

变化:

  • 搜索是由启动implicitly还是隐式转换
  • 寻求的次要隐含值是否是多态的
  • 提供的辅助隐式值是否是多态的

我得到以下结果:

Conversion/value  Searching for  Supplied | Works?
----------------  -------------  -------- | ------
     conversion     poly          poly    |  yes
     conversion     poly          mono    |  **no**
     conversion     mono          poly    |  yes
     conversion     mono …
Run Code Online (Sandbox Code Playgroud)

polymorphism scala implicit

8
推荐指数
1
解决办法
224
查看次数

标签 统计

implicit ×1

polymorphism ×1

scala ×1