Scala枚举类型的命名规范是什么?

16 浏览
0 Comments

Scala枚举类型的命名规范是什么?

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文档中描述的相同风格。问题在于,与Java或C#等其他语言中的枚举定义相比,“EventType.EventType”的名称非常冗长且奇怪。因此,我想知道是否有任何推荐的命名风格可以提高可读性?提前感谢。

admin 更改状态以发布 2023年5月25日
0
0 Comments

为了缩短它,您可以使用带有下划线的导入来从对象 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

0