Scala枚举:选择一些值作为类型

时间:2015-11-23 08:04:44

标签: scala types enumeration

考虑LogCreateUser枚举:

WeekDays

现在我想定义一个只能在周末作为值的变量,例如:

object WeekDay extends Enumeration {
    type WeekDay = Value
    val Mon, Tue, Wed, Thu, Fri, Sat, Sun = Value
}

但显然这不是正确的Scala语法。我有什么方法可以做或近似这个吗?

1 个答案:

答案 0 :(得分:5)

直接用谷歌搜索" Scala枚举",然后点击second link。简而言之,引用Martin Odersky的话说,枚举是指具有名称和顺序的简单整数常量。如果需要类型,则应使用案例类。因为周末也是工作日,所以听起来是合适的:

sealed trait Weekday
sealed trait WorkDay extends Weekday
case object Monday extends WorkDay

sealed trait WeekendDay extends Weekday
case object Saturday extends WeekendDay
case object Sunday extends WeekendDay


object Main {     
    def onlyWeekendDays(d: WeekendDay) {
        println(d)
    }
    def allDays( d: Weekday ) {}

    def test() {
        onlyWeekendDays( Saturday );
        allDays( Saturday );
        allDays( Monday );
        // this fails to type-check: onlyWeekendDays( Monday );
    }
}