我想模拟某些相互依赖关系案例类别的字段之间,使rhs
字段的可能值将取决于类型lhs
。如何模拟案例类的字段之间的相关性?
在下面的例子中,我没有设法编写type B = A.B
- 它不会编译,只有type B = A#B
。毫不奇怪的是,在下面的例子中,这行代码会编译:SomeDomain.Foo(SomeDomain.Brr, SomeDomain.Bee.Pooh)
,但这样做会失败。
显然我做错了什么。这里有一个小的修复吗?或者,我应该完全采取不同的方法吗?
// Entering paste mode (ctrl-D to finish)
trait Domain {
trait Bar {
type B
}
type A <: Bar
type B = A#B
case class Foo(lhs: A, rhs: B)
}
object SomeDomain extends Domain {
sealed trait Baz extends Bar {
sealed trait Inner
override type B = Inner
}
case object Brr extends Baz {
case object Strawberry extends Inner
case object Raspberry extends Inner
}
case object Bee extends Baz {
case object Honey extends Inner
case object Pooh extends Inner
}
override type A = Baz
}
val foo = SomeDomain.Foo(SomeDomain.Brr, SomeDomain.Bee.Pooh)
val f1= foo.lhs
val f2 = foo.rhs
// Exiting paste mode, now interpreting.
defined trait Domain
defined object SomeDomain
foo: SomeDomain.Foo = Foo(Brr,Pooh)
f1: SomeDomain.A = Brr
f2: SomeDomain.B = Pooh
你说的目的被击败,但我觉得你的目的不明确......你怎么打算用这个? –
@CyrilleCorpet,目的,如果我不清楚,对不起,是让Foo建立一个域,其中'B'的可能值受'A' – Yaneeve