【发布时间】:2021-08-30 18:41:58
【问题描述】:
我很难理解与“找不到隐含价值”错误相关的错误。这是一个突出错误的最小示例。
sealed trait BehaviourA
final case object A1 extends BehaviourA
final case object A2 extends BehaviourA
sealed trait BehaviourB
final case object B1 extends BehaviourB
final case object B2 extends BehaviourB
trait factory[O<:BehaviourA, R<:BehaviourB]{ ... }
// Define an implicit value for each combination of the two behaviours
object factory {
implicit val behaviour1 = new factory[A1, B1] { ... }
... (one for each Ai, Bj)
}
object genElement {
import factory._
def apply[O <: BehaviourA, R<:BehaviourB](...)(implicit c: factory[O, R])
}
但是,当我尝试从另一个方法调用它时,它会抱怨在 genExample 中找不到隐式 c 的值。
def callerMtd[T<:BehaviourA](){
genElement[T, B1](...)
}
or
def callerMtd[T<:BehaviourA, R<:BehaviourB](){
genElement[T, R](...)
}
如果我像下面这样直接调用它们,那很好。为什么我不能在调用者方法中使用类型参数?
def callerMtd(){
genElement[A1, B2](...)
}
【问题讨论】:
标签: scala generics implicit type-parameter