Scala 如何“希望”我定义s-expr?在英语中,我们递归地定义 s-expr,如下所示:“一个 s-expr 要么是一个原子,要么是一个 s-expr 的列表。” 你在 Scala 里怎么说?
我很确定这是错误的:
// Scala 2.11.2
trait Sexpr
case class Atom(text: String) extends Sexpr
type List[Sexpr] = Sexpr // To my amazement, the compiler accepts this!
val blah = Atom("blah")
def matchtest(sexpr: Sexpr): Unit = sexpr match {
case blah :: Nil => println(blah) // But the compiler won't accept this
case _ => println("no match")
}
matchtest(List(Atom("blah")))
Either
也可能不适合这个,从那时起我必须区分Left
and Right
,这是无关紧要的。
您如何创建这样的递归类定义,以便它与 Scala 的其余部分很好地协同工作?