`
jonathan_zz
  • 浏览: 25986 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Scala中的枚举类型

阅读更多

        我们都知道在C++,Java中枚举类型是很常见,也是很好实现的,今天忽然想到在Scala中枚举类型应该是什么样的?如果让我现在自己去构造的话,我觉得用Scala中的单类(Singleton)Object应该就可以实现。下课之后回来查了查,发现Scala提供一个叫做Enumeration的抽象类,可以通过继承它来实现一个枚举类型。当然还是需要用Object来实现,下面是官网文档中的一个Enumeration的例子。

 

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

    import WeekDay._

    def isWorkingDay(d: WeekDay) = ! (d == Sat || d == Sun)

    WeekDay filter isWorkingDay foreach println
  }
 

        Value是Enumeration中的一个内部类,同名的Value方法能够返回类的一个实例,在这里的意思就是说值如Weekday.Mon的类型是Weekday.Value,并且该枚举类型中的所有值的类型都是Weekday.Value。说的比较绕口,但是这基本上就是《Programming in Scala》中的原话,当初看的时候就没有理解,难怪对Scala中的枚举类型一点印象都没有。我个人觉得就是通过这种方式定义了一个新的类型,在上例中就是Weekday,至于为什么用这种方式,我个人也不了解,毕竟我也是初学者,只有在使用中去体会了。最后一行是Scala中的一种常见的语法糖,其实就是省略了括号和点的方法调用。

1
1
分享到:
评论
1 楼 alanwu 2009-10-12  
引用
最后一行是Scala中的一种常见的语法糖,其实就是省略了括号和点的方法调用。


还省略了参数传入


引用
我个人觉得就是通过这种方式定义了一个新的类型,在上例中就是Weekday,至于为什么用这种方式,我个人也不了解

Enumeration,以及Value实现了很多枚举的共同属性和方法,这样我们可以少敲代码。

相关推荐

Global site tag (gtag.js) - Google Analytics