给出这个例子:
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
的类型相同。 IE。 String
因为我传入了 Foo
。我知道我可以用不同的方式对此进行建模,但很高兴知道它是否完全可行?
最佳答案
作为起点,它会编译并提供您需要的一些约束。
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")
关于scala - 从参数化类型引用抽象类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8148386/