如何通过有界泛型解决隐式查找?
How to resolve implicit lookup by bounded generic?
我有一系列 class Foo:
trait Foo
class Foo1 extends Foo
class Foo2 extends Foo
//...
我有一个类型 class 和所有 Foos 的实例:
trait CanBar[T] { def bar: Unit }
implicit val foo1: CanBar[Foo1] = null
implicit val foo2: CanBar[Foo2] = null
我尝试从方法中获取类型 class 实例:
def bar[T <: Foo](foo: T) = {
val canBar = implicitly[CanBar[T]]
//...
}
编译器抱怨 No implicits found for parameter e: CanBar[T]
,即使我导入了所有 CanBar[Foo]
个实例。
我的假设是编译器正在寻找 T(Any 或 Foo)但没有找到。我是否正确,在这种情况下如何让它工作(没有宏)
The compiler complains No implicits found for parameter e: CanBar[T]
, even though I imported all the CanBar[Foo]
instances.
CanBar[Foo]
不是 CanBar[T]
。
添加上下文绑定
def bar[T <: Foo : CanBar](foo: T) = {
val canBar = implicitly[CanBar[T]]
//...
}
我有一系列 class Foo:
trait Foo
class Foo1 extends Foo
class Foo2 extends Foo
//...
我有一个类型 class 和所有 Foos 的实例:
trait CanBar[T] { def bar: Unit }
implicit val foo1: CanBar[Foo1] = null
implicit val foo2: CanBar[Foo2] = null
我尝试从方法中获取类型 class 实例:
def bar[T <: Foo](foo: T) = {
val canBar = implicitly[CanBar[T]]
//...
}
编译器抱怨 No implicits found for parameter e: CanBar[T]
,即使我导入了所有 CanBar[Foo]
个实例。
我的假设是编译器正在寻找 T(Any 或 Foo)但没有找到。我是否正确,在这种情况下如何让它工作(没有宏)
The compiler complains
No implicits found for parameter e: CanBar[T]
, even though I imported all theCanBar[Foo]
instances.
CanBar[Foo]
不是 CanBar[T]
。
添加上下文绑定
def bar[T <: Foo : CanBar](foo: T) = {
val canBar = implicitly[CanBar[T]]
//...
}