我试图匹配转换为集合中保存的字符串的枚举值。这是代码:
object Foo extends Enumeration {
val ONE = Value("ONE")
val TWO = Value("TWO")
}
def check(seq: Seq[String]): Unit = seq match {
case Seq(Foo.ONE.toString) => println("match")
case _ => println("no match")
}
这会导致编译错误:
error: stable identifier required, but Foo.ONE.toString found.
case Seq(Foo.ONE.toString) => println("match")
使用我的Foo枚举值作为模式匹配case语句的元素的正确方法是什么?
答案 0 :(得分:1)
首先将其映射回枚举:
import scala.util.Try
val enumSeq = seq map (x => Try(Foo.withName(x)))
然后,您可以过滤掉Failure
或匹配Seq(Success(ONE))
,Seq(Success(ONE))
,...,Seq(Failure)
等。
答案 1 :(得分:1)
def check(seq: Seq[String]): Unit = seq match {
case Seq(s @ _) if s == Foo.ONE.toString => println("match")
case _ => println("no match")
}
答案 2 :(得分:1)
我喜欢@cchantep的回复,这是为了避免在模式匹配中调用.toString
并实现check
方法,如下所示:
def check(seq: Seq[Foo.Value]): Unit = seq match {
case Seq(Foo.ONE) => println("match")
case _ => println("no match")
}