是否有更清晰的方法将字符串映射到解析器组合器中的枚举值?
object Mode extends Enumeration {
type Mode = Value
val View, Add, Modify, Delete = Value
}
import Mode._
object ModeParser extends JavaTokenParsers {
def mode: Parser[Mode] = ("^(" + Mode.values.mkString("|") + ")$").r ^^ {
Mode.withName(_)
}
}
最佳答案
解析器是可组合的,因此一旦您可以构建读取一个 Mode.Value
的解析器,您就可以使用 |
组合所有此类变体:
object ModeParser extends JavaTokenParsers {
val mode: Parser[Mode.Value] = Mode.values.toList map{m =>
literal(m.toString) ^^^ m
} reduceLeft {_ | _}
}
你会像这样使用它:
scala> ModeParser.parseAll(ModeParser.mode, "Viewx")
关于scala - 枚举值的解析器组合器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17416835/