给出这个例子:
abstract class Base { type Value }
case object Foo extends Base { type Value = String }
case class Bar[A <: Base](a: A, value: A#Value)
val x = Bar(Foo, "It's a Foo") // Won't compile with found String required ?#Value
我希望value
的类型约束与A
的类型相同。即String
,因为我正在传递Foo
。我知道我可以用不同的方式对其进行建模,但知道它是否可能会很好吗?
答案 0 :(得分:2)
作为起点,这会编译并提供您需要的一些约束。
abstract class Base { type Value }
case object Foo extends Base { type Value = String }
case class Bar[A <: Base, V <: A#Value](a: A, value: V)
val x = Bar(Foo, "It's a Foo")