У меня возникли проблемы с рекурсивным самостоятельным типом, которое должно соответствовать члену типа:элемента типа Использования в качестве самостоятельного типа
trait Elem { me =>
type Peer
import me.{Peer => Peer0}
type This <: Elem { type Peer = Peer0 }
def mkCopy(): This
}
Теперь я хочу, чтобы определить удобную черту:
trait ImmutableImpl extends Elem {
_ : This =>
def mkCopy(): This = this
}
Это не работает, потому что "ошибка: не найден: Данный тип" :(
Следующая попытка:
trait ImmutableImpl[Repr] extends Elem {
_ : Repr =>
type This = Repr
def mkCopy(): This = this
}
Это не с «Ошибка: переопределяющий тип Это ... Это несовместимый тип».
я могу сделать только эту мерзость:
trait ImmutableImpl[Peer0, Repr <: Elem { type Peer = Peer0 }] extends Elem {
_ : Repr =>
type Peer = Peer0
type This = Repr
override def mkCopy(): This = this
}
class IntElem extends ImmutableImpl[Int, IntElem]
В реальном случае у меня есть несколько элементов типа, так что делает этот последний подход бесполезен, так как это намного больше котла пластины, что осуществлению mkCopy
вручную каждый раз, когда ,
Любые идеи?
Проблема, она станет 'Элем [S <: Sys [S ], A [~ <: Sys [~]] <: Elem [~, A]] 'в конце, и я должен носить этот багаж во многих местах; на самом деле это оригинальная мотивация для членов типа. Я освобождаю ограничение на очистку 'Elem {...}' теперь, таким образом, я могу иметь тип переопределения This = Repr' в признаке реализации, кажется, и я, кажется, не полагаюсь на этой общей утонченности. –