我想模擬某些相互依賴關係案例類別的字段之間,使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