返回类型“|”在Scala的解析器组合器中

时间:2009-12-18 17:20:55

标签: parsing scala parser-combinators

我正在"Parser combinators in Scala"阅读伯尼·波普的幻灯片。他引用了“替代”组合子|的方法签名类型:

def | [U >: T](q: => Parser[U]): Parser[U]

并询问,“作业:为什么不改变这种类型?”

def | [U](q: => Parser[U]): Parser[Either[T,U]]

1 个答案:

答案 0 :(得分:1)

case class Stooge(name: String)
val moe: Parser[String] = "Moe"
val larry: Parser[String] = "Larry"
val curly: Parser[String] = "Curly"
val shemp: Parser[String] = "Shemp"

val stooge: Parser[Stooge] = (moe | larry | curly | shemp) ^^ { s => Stooge(s) }

现在,想象一下,如果您使用{ s => Stooge(s) }而不是s: Either[Either[Either[String,String],String],String],则必须编写代码而不是s: String