所以我有一些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 /
答案 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