【发布时间】:2017-01-01 22:41:57
【问题描述】:
我已将其编辑为@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
Zhi 的遮阳篷是正确的。以下编译:
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
}
}
但是我仍然不认为这是正确的行为,因为这些是两种不同方法的参数,并且通常允许方法重用参数名称。
【问题讨论】:
-
您可以尝试查看
scalac -print的输出,或者查看生成的字节码 -
你的“正确”概念是不正确的。
标签: scala context-bound