ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Scala里面如何使用枚举

2020-12-17 09:03:09  阅读:260  来源: 互联网

标签:case 里面 val Scala Value 枚举 WeekDay println


枚举通常用来定义已知数量的常量,比如月份,星期,季节等等,用过java的人都知道定义枚举的关键字是enum,在scala里面和java有所不同,来看一个完整的例子定义:

object EnumTest {
 
  /***
    * 定义一个星期的枚举
    */
  object WeekDay extends Enumeration{
    type WeekDay = Value  //声明枚举对外暴露的变量类型
    val Mon = Value("1")
    val Tue = Value("2")
    val Wed = Value("3")
    val Thu = Value("4")
    val Fri = Value("5")
    val Sat = Value("6")
    val Sun = Value("7")
    def checkExists(day:String) = this.values.exists(_.toString==day) //检测是否存在此枚举值
    def isWorkingDay(day:WeekDay) = ! ( day==Sat || day == Sun) //判断是否是工作日
    def showAll = this.values.foreach(println) // 打印所有的枚举值
  }
 
 
 
  def main(args: Array[String]): Unit = {
 
    println(WeekDay.checkExists("8"))//检测是否存在
 
    println(WeekDay.Sun==WeekDay.withName("7"))//正确的使用方法
 
    println(WeekDay.Sun=="7")//错误的使用方法
 
    WeekDay.showAll //打印所有的枚举值
 
    println(WeekDay.isWorkingDay(WeekDay.Sun)) //是否是工作日
 
  }
 
}

上面的这个例子基本涵盖了枚举的所有常用方法,定义枚举我们继承的是Enumeration抽象类,然后通过内部对象Value来赋值每一个枚举的值,此外里面还定义了几个工具方法,比如判断是否存在某个枚举,是否是工作日,以及打印所有的枚举值,在使用的时候可以直接通过Object来访问 。

此外还可以用枚举值做模式匹配:

val weekDay=WeekDay.Sun
 
    weekDay match {
      case WeekDay.Mon=> println("星期一")
      case WeekDay.Tue=> println("星期二")
      case WeekDay.Wed=> println("星期三")
      case WeekDay.Thu=> println("星期四")
      case WeekDay.Fri=> println("星期五")
      case WeekDay.Sat=> println("星期六")
      case WeekDay.Sun=> println("星期日")
 
    }

 

object EnumerationOps {
  def main(args: Array[String]): Unit = {
    val weekDay=WeekDay.Sun
    CalWeekDay(weekDay)
  }

  def CalWeekDay(day:WeekDay.Value):Unit = {
    day match {
      case WeekDay.Mon=> println("星期一")
      case WeekDay.Tue=> println("星期二")
      case WeekDay.Wed=> println("星期三")
      case WeekDay.Thu=> println("星期四")
      case WeekDay.Fri=> println("星期五")
      case WeekDay.Sat=> println("星期六")
      case WeekDay.Sun=> println("星期日")
    }
  }

  object WeekDay extends Enumeration{
    type WeekDay = Value  //声明枚举对外暴露的变量类型
    val Mon = Value("1")
    val Tue = Value("2")
    val Wed = Value("3")
    val Thu = Value("4")
    val Fri = Value("5")
    val Sat = Value("6")
    val Sun = Value("7")
    def checkExists(day:String) = this.values.exists(_.toString==day) //检测是否存在此枚举值
    def isWorkingDay(day:WeekDay) = ! ( day==Sat || day == Sun) //判断是否是工作日
    def showAll = this.values.foreach(println) // 打印所有的枚举值
  }

}

 

 记住:CalWeekDay(day:WeekDay.Value) 参数类型是WeekDay.Value

 

标签:case,里面,val,Scala,Value,枚举,WeekDay,println
来源: https://www.cnblogs.com/kpwong/p/14147768.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有