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中描述的相同样式。这里的问题是你可以看到" EventType.EventType"的名称。与Java或C#等其他语言中的枚举定义相比,它是多余的,也很奇怪。
所以我想知道是否有任何推荐的命名方式来提高可读性?
提前致谢。
答案 0 :(得分:1)
要缩短它,您可以使用带下划线的导入从对象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