0

我有一系列 Foo 类:

trait Foo
class Foo1 extends Foo
class Foo2 extends Foo
//...

我有一个类型类和所有 Foos 的实例:

trait CanBar[T] { def bar: Unit }
implicit val foo1: CanBar[Foo1] = null
implicit val foo2: CanBar[Foo2] = null

我尝试从一个方法中获取类型类实例:

def bar[T <: Foo](foo: T) = {
  val canBar = implicitly[CanBar[T]]
  //...
}

No implicits found for parameter e: CanBar[T]即使我导入了所有CanBar[Foo]实例,编译器也会抱怨。

我的假设是编译器正在寻找 T(它是 Any 或 Foo)并且没有找到任何东西。我是否正确,在这种情况下如何使它工作(没有宏)

4

1 回答 1

2

No implicits found for parameter e: CanBar[T]即使我导入了所有CanBar[Foo]实例,编译器也会抱怨。

CanBar[Foo]不是CanBar[T]

添加上下文绑定

def bar[T <: Foo : CanBar](foo: T) = {
  val canBar = implicitly[CanBar[T]]
  //...
}
于 2019-08-14T13:41:46.777 回答