【问题标题】:Naming convention about the Scala enumeration types?关于 Scala 枚举类型的命名约定?
【发布时间】:2015-08-17 02:04:51
【问题描述】:

Scala 枚举类型的命名约定是什么?例如,在下面的代码中:

object EventType extends Enumeration {
    type EventType = Value

    val Registered = Value("Registered")
    val Started = Value("Started")
}

/**
 * The event that fires under specific life cycle
 *
 * @param eventType the [[EventType.EventType]]
 */
 case class Event(eventType: EventType.EventType)

上面的代码遵循Scala doc中描述的相同风格。这里的问题是,与 Java 或 C# 等其他语言中的枚举定义相比,您可以看到“EventType.EventType”的名称非常多余,而且非常奇怪。

所以我想知道是否有任何推荐的命名风格来提高可读性?

提前致谢。

【问题讨论】:

  • 您可能已经意识到这一点,但许多 scala 程序员避免使用 Enumeration 类,而是使用密封的基类型和 case 对象作为可能的值。如果您有兴趣,可以在此问题的答案中阅读更多内容:stackoverflow.com/questions/1321745/…
  • 非常感谢您的评论。我从这个帖子中学到了很多

标签: scala naming-conventions


【解决方案1】:

为了缩短它,您可以使用带下划线的 import 从对象 EventType 中导入所有内容。因此,您可以使用import EventType._ 而不是import EventType。这是一个例子:

scala> object EventType extends Enumeration {
     |     type EventType = Value
     |
     |     val Registered = Value("Registered")
     |     val Started = Value("Started")
     | }
defined object EventType

scala> object Test {
     | import EventType._
     |
     | case class Event(eventType: EventType)
     | }
defined object Test

事情可能看起来令人困惑,因为EventType 是对象的名称,EventType.EventType 是枚举的类型。所以如果你这样使用它:

EventType.Registered

那么在这种情况下,它是对象的名称,而不是类型。相反,这里:

case class Event(eventType: EventType)

它是类型的名称,即用type EventType定义的那个。

如果您想避免混淆,您可以为类型指定不同的名称:

scala> object Events extends Enumeration {
     |           type EventType = Value
     |           val Registered = Value("Registered")
     |           val Started = Value("Started")
     | }
defined object Events
scala> object Test {
     | import Events._
     | case class Event(eventType: EventType)
     | val a = Event(Registered)
     | }
defined object Test

【讨论】:

  • 感谢您的回复。然而这有点棘手......“导入”并没有解决可读性问题:有 EventType.Registered 和 EventType.Started 这让其他人认为“EventType”本身是“枚举”类型,但在 Scala 世界中, “EventType.EventType”实际上是真正的类型。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-11-27
  • 2011-03-05
  • 1970-01-01
  • 1970-01-01
  • 2017-06-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多