scala - 从参数化类型引用抽象类型

标签 scala

给出这个例子:

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/

相关文章:

scala - 奇怪的错误消息 : bad symbolic reference. package.class 中的签名指的是包 org 中的术语 apache,该术语不可用

scala - sbt 中的++= 和 += 之间有什么区别,比如 libraryDependencies?

class - 在包层次结构中具有重复名称的 Scala 包私有(private)

scala - (数组/ML Vector/MLlib Vector)RDD 到 ML Vector Dataframe 可以

scala - IntelliJ IDEA 中的中缀方法调用

java - scala play 框架中的自定义消息属性,用于删除硬编码字符串

scala - Scala 中 Null/Nothing/Unit 的用法

eclipse - 如何在本地构建和运行 Scala Spark

scala - 无法使用 Akka-Http 验证 OAuth2

scala - 如何从 sbt 0.10 定义任务以使用 hprof 运行