我正在阅读 Bernie Pope 关于“Scala 中的解析器组合器”的幻灯片。他引用了“替代”组合器的方法签名类型|
:
def | [U >: T](q: => Parser[U]): Parser[U]
并问,“家庭作业:为什么不 | 有这种类型呢?”
def | [U](q: => Parser[U]): Parser[Either[T,U]]
我正在阅读 Bernie Pope 关于“Scala 中的解析器组合器”的幻灯片。他引用了“替代”组合器的方法签名类型|
:
def | [U >: T](q: => Parser[U]): Parser[U]
并问,“家庭作业:为什么不 | 有这种类型呢?”
def | [U](q: => Parser[U]): Parser[Either[T,U]]
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]
是 a 而不是 a ,您将不得不编写的代码s: String
。