Scala中的枚举概念 – 选择哪个?
定义枚举时,Scala程序员有几个选择:
>使用Scala Enumeration 在研究Scala中枚举的最佳实践时,我偶然发现了Google的帖子,标题为Enumerations must DIE和this博客,其中突出了使用Scala枚举类的潜在问题.这两个引用都对Scala枚举类施加了阴影. 选项2似乎是很多工作,对于方案3,我没有使用Scalaz库,因此我有兴趣了解其他人使用Scalaz Enum的经验.最后的选择是与Java进行交互,我试图避免,因为我喜欢在Scala编程中采用纯粹主义的方法. 这个职位的重点是利用社区经验来详细说明当一个选择优于另一个选项时的上下文,并且在哪个上下文中使用特定选项是错误的或可能导致严重问题,以便在选择一个选项时可以做出明智的决定.当一个选项比其他选项更好时,我不是在寻找意见,而是具体使用上下文;意见有可能让这个帖子关闭,所以请避免. 解决方法
Scala枚举
Scala枚举的优点是它们重量轻.如果你想要的是一组有序的值,这些可能是最好的选择.他们有两个主要的缺点.首先,很难向他们添加行为;它们的主要目的仅仅是作为一个独特的实例存在,而不是提供复杂的功能.其次,它们有类型擦除.您的第二个链接显示方法如何重载与它们不起作用. 密封件对象 案例对象是频谱的另一端.每一个都是自己的类 – 意思是没有类型擦除 – 它们可以提供独特,复杂的行为.缺点是高昂的开销,因为每个人都是自己的班级,缺乏内部的迭代.如果要为某些或所有实例指定唯一的字段/方法/实现,这是一个很好的选择.他们也可以很好地匹配,但不能迭代所有的实例. Java枚举 中间的东西向枚举本身添加方法/字段很容易,但是为每个实例定制行为要困难得多.一切都包含在一个类中,因此它比例对象具有更少的开销,并且与Scala枚举中的类型擦除没有相同的问题.如果有一个有序的,可迭代的值列表很重要,并且您想要一些常用于所有实例的附加功能,这些功能都可以正常工作.如果类型擦除是一个问题(例如,如果您计划发送到基于类型的函数),它们也很有用.最后,他们将保证与Java进行简单的互操作. 没有使用你提到的任何图书馆,我不会对他们说什么. 概要 ScalaEnum >可以 密封件对象 >每个实例的唯一字段和方法 Java枚举 >轻松实现共享字段和方法>可以> Easy Java互操作>低开销 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |