我可以使用别名,因此我不需要在以下名称冲突情况下更改任何类型参数/成员:
trait Bar {
type A
}
trait Foo {
def get[A]: Option[Bar { type A = A }] // "illegal cyclic reference"
}
我知道我可以写
trait Foo {
def get[A1]: Option[Bar { type A = A1 }]
}
但我真的不想改变类型名称。
答案 0 :(得分:3)
你可以,例如做这样的事情:
trait Bar {
type A
}
trait Foo {
type M[X] = Bar { type A = X }
def get[A]: Option[M[A]]
}
或内联:
def get[A]: Option[({ type X[Y] = Bar { type A = Y }})#X[A]] = ???
或者,如果您愿意:
def get[A]: Option[({ type A1 = A; type X = Bar { type A = A1 }})#X] = ???