3

我可以使用别名,这样我就不需要在以下名称冲突情况下更改任何类型参数/成员:

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 }]
}

但我真的不想更改类型名称。

4

1 回答 1

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] = ???
于 2013-05-04T15:31:51.080 回答