我在F#中看到它很容易定义一个类型,它是由一组其他类型组合而来的,例如
type MyFiveNumbers = One | Two | Three | Four | Five
这看起来很棒!
Scala中最简单的方法是什么?
答案 0 :(得分:5)
One
其余不是类型,而是工会案例。实际上,Scala等价物确实使它们成为类型:
sealed trait MyFiveNumbers
case object One extends MyFiveNumbers
case object Two extends MyFiveNumbers
...
在这种简单的情况下,您最好只使用Java枚举。但是,如果任何构造函数具有参数(例如,在末尾添加| Other of int
),则它们对应于Scala案例类:
case class Other(x: Int) extends MyFiveNumbers
您可以像在F#中一样使用模式匹配:
// x has type MyFiveNumbers
x match {
case One => ...
...
case Other(n) => ...
}
并获取有关不完整匹配的编译器警告(仅当使用sealed
关键字时;否则您可以在其他文件中创建其他案例。)