Я редактировал это более простой форме вопроса, к которому @Zhi Юань Ван ответил:Scala: Тройная Context границы, параметры доказательства не найдены
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]
несмотря на получение следующих в РЕПЛ:
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
awnser Чжи является правильным. Следующие компилирует:
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', или сгенерированного байткод –
Ваше понятие «правильно» неверно. –