我想写一个这样的方法:
def validate[T <: Enumeration](input: String)(implicit enum: T) : Seq[T]
它将接受一个输入(“foo,bar,baz”)并用逗号分隔它 - 然后与给定的枚举进行比较。 例如,给定这个枚举:
object Letter extends Enumeration {
type Letter = Value
val first = Value("A")
val second = Value("B")
val third = Value("C")
}
validate[Letter]("A,B,C,D")
的预期输出
将是:Seq[Letter](first,second,third)
.
我尝试过做这样的事情:
val inputValues = input.split(",").toSeq
for {
inputValue <- inputValues
enumValue <- enum.values
if enumValue.toString == inputValue
} yield enumValue
但是由于类型系统的原因,它无法编译...还有其他方法可以实现吗?
最佳答案
无法使用隐式枚举来做到这一点,但使用显式枚举似乎是可能的:
scala> import scala.util.Try
scala> def validate[T <: Enumeration](input: String, enum: T):Seq[T#Value] = {
| val inputValues = input.split(",").toSeq
| for (value <- inputValues if Try(enum.withName(value)).isSuccess) yield enum.withName(value) }
validate: [T <: Enumeration](input: String, enum: T)Seq[T#Value]
scala> validate("A,B,D", Letter)
res12: Seq[Letter.Value] = ArrayBuffer(A, B)
关于scala - 使用枚举作为类型参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24110688/