在 Ocaml 中您可以执行以下操作:
type attr = ..
type attr += Str of string
type attr +=
| Int of int
| Float of float
Scala 中有这个版本吗?
我知道有一种方法可以用类来实现这一点,如this帖子中所示,但是有没有办法做到这一点,使其保持功能性程序?
我希望能够在完全不同的文件中添加此类型,而不必修改早期的代码。
在 scala 3 中:
type SomeType = Int | Double
type RicherType = SomeType | String | List[Int]
def process(value: RicherType): Unit = value match {
case i: Int => println(s"Integer: $i")
case d: Double => println(s"Double: $d")
case s: String => println(s"String: $s")
case l: List[Int] => println(s"List of Ints: $l")
}
在 scala 2 中:
sealed trait SomeType
case class IntType(value: Int) extends SomeType
case class DoubleType(value: Double) extends SomeType
sealed trait RicherType
case class StringType(value: String) extends RicherType
case class IntListType(value: List[Int]) extends RicherType
case class SomeTypeWrapper(value: SomeType) extends RicherType
def process(value: RicherType): Unit = value match {
case IntType(i) => println(s"Integer: $i")
case DoubleType(d) => println(s"Double: $d")
case StringType(s) => println(s"String: $s")
case IntListType(l) => println(s"List of Ints: $l")
case SomeTypeWrapper(IntType(i)) => println(s"Wrapped Integer: $i")
case SomeTypeWrapper(DoubleType(i)) => println(s"Wrapped Double: $d")
}