zoukankan      html  css  js  c++  java
  • Scala里面如何使用枚举

    枚举通常用来定义已知数量的常量,比如月份,星期,季节等等,用过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("星期日")
     
        }
        
        //星期日

    上面基本就是Scala里面最常见的枚举方法了,当然这种常见的枚举有一些缺点,比如上面的这个模式匹配,如果我仅仅写3个枚举值,它编译时候仍然能通过,但在运行的时候就会报错,最后这种方式不能枚举一个对象,只能简单的类型,如果想枚举的值,本身就是一个Bean,那么则需要另外的方式,这里就不展开了

  • 相关阅读:
    1、接口测试全流程
    7、执行 suite 后,result.html 测试报告中,测试结果全部显示为通过原因分析
    6、Python 中 利用 openpyxl 读 写 excel 操作
    5、Python 基础类型 -- Dictionary 字典类型
    4、Python 基础类型 -- Tuple 元祖类型
    cp: omitting directory”错误的解释和解决办法
    c++ 之bind使用
    Linux查找–find命令
    lsof命令总结
    Linux查看端口、进程情况及kill进程
  • 原文地址:https://www.cnblogs.com/itboys/p/9303643.html
Copyright © 2011-2022 走看看