使用一个值初始化Scala枚举ValueSet的简写

时间:2017-07-22 14:21:39

标签: scala

所以我有一些Scala Enumeration对象:

object KnotType extends Enumeration {
        type KnotType = Value
    val STOPPER, HITCH, ENDLOOP, MIDLOOP, ADJUSTABLELOOP, BEND, BINDING = Value
  }
  import KnotType._

  object AnotherType extends Enumeration {
        ...      }
  import AnotherType ._

我想初始化一个只有一个Value的新ValueSet实例。在最短的时候:

val eKnots = STOPPER + HITCH
eKnot: KnotType.ValueSet = KnotType.ValueSet(STOPPER , HITCH)

有魅力。但是,要从一个值创建一个ValueSet,我必须更加明确:(特别是因为枚举对象类不仅仅是这样)

从一个值创建枚举会产生一个Value(如预期的那样)但不是我想要的(ValueSet):

val eKnot = STOPPER
eKnot: KnotType.Value = STOPPER

传统方式是:

val eKnot =  KnotType.ValueSet(STOPPER)
eKnot: KnotType.ValueSet = KnotType.ValueSet(STOPPER)

一种不雅的方式:

val eKnot = STOPPER + STOPPER
eKnot: KnotType.ValueSet = KnotType.ValueSet(STOPPER)

漫长的方式 - 工作正常,但我是在简洁之后

val eKnot = KnotType.ValueSet.empty + STOPPER
eKnot: KnotType.ValueSet = KnotType.ValueSet(STOPPER)

我可以使用其他简写吗? 即 val eKnot = STOPPER + / somethingsimple /

1 个答案:

答案 0 :(得分:2)

您可以创建自己的扩展方法(类似于JavaConverters):

implicit class ValueToValueSet(v: Value) {
  def toSet: ValueSet = ValueSet(v)
}

val eKnot: KnotType.ValueSet = STOPPER.toSet

或隐式转换(不推荐我认为这与JavaConversions类似):

implicit def valueToValueSet(v: Value): ValueSet = ValueSet(v)

val eKnot: KnotType.ValueSet = STOPPER