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