[英]Scala: Triple Context Bounds, evidence parameters not found
我已将此问题编辑为@Zhi Yuan Wang回答的一个简单形式的问题:
object ContBound {
def f2[A: Seq, B: Seq]: Unit = {
val a1: Seq[A] = evidence$1
val b2: Seq[B] = evidence$2
}
def f3[A: Seq, B: Seq, C: Seq]: Unit = {
val a1: Seq[A] = evidence$1
val b2: Seq[B] = evidence$2
val a3: Seq[C] = evidence$3
}
}
我收到以下错误:
not found value evidence$1
not found value evidence$2
type mismatch; found :Seq[A] required: Seq[C]
尽管在REPL中获得了以下内容:
def f3[A: Seq, B: Seq, C: Seq]: Unit =
| {
| val a1: Seq[A] = evidence$1
| val b2: Seq[B] = evidence$2
| val a3: Seq[C] = evidence$3
| }
f3: [A, B, C](implicit evidence$1: Seq[A], implicit evidence$2: Seq[B], implicit evidence$3: Seq[C])Unit
智的遮阳棚是正确的。 编译如下:
object ContBound {
def f2[A: Seq, B: Seq]: Unit = {
val a1: Seq[A] = evidence$1
val b2: Seq[B] = evidence$2
}
def f3[A: Seq, B: Seq, C: Seq]: Unit = {
val a1: Seq[A] = evidence$3
val b2: Seq[B] = evidence$4
val a3: Seq[C] = evidence$5
}
}
但是,我仍然不认为这是正确的行为,因为这是两种不同方法的参数,通常允许方法重用参数名称。
你有没有尝试过
def comma3[A: RParse, B: RParse, C: RParse, D](f: (A, B, C) => D): D =
expr match {
case CommaExpr(Seq(e1, e2, e3)) =>
f(evidence$3.get(e1), evidence$4.get(e2), evidence$5.get(e3))
}
因为证据$ 1已被
def comma3[]??
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.