结合scala中的类型

时间:2014-12-01 09:02:04

标签: scala f#

我在F#中看到它很容易定义一个类型,它是由一组其他类型组合而来的,例如

type MyFiveNumbers = One | Two | Three | Four | Five

这看起来很棒!

Scala中最简单的方法是什么?

1 个答案:

答案 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关键字时;否则您可以在其他文件中创建其他案例。)