私は、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