仅出于显示问题的目的,您在 paste.org 上的代码可以缩短为:
trait Expr
case class BinOp(op: String, left: Expr, right: Expr) extends Expr
case class IntLit(value: Int) extends Expr
case class Var(name: String) extends Expr
println(BinOp("+", Var("b"), IntLit(12))) // prints BinOp(+,Var(b),IntLit(12))
正如 Rex Kerr 在他的评论中指出的那样,您可以简单地覆盖 toString(在上面的 println 中默默地调用它以将其所有参数转换为可打印值)来做您想做的事情。
trait Expr
case class BinOp(op: String, left: Expr, right: Expr) extends Expr {
override def toString : String = "BinOp(\"" + op + "\", " + left.toString + ", " + right.toString + ")"
}
case class IntLit(value: Int) extends Expr
case class Var(name: String) extends Expr {
override def toString : String = "Var(\"" + name + "\")"
}
现在,如您所愿:
scala> println(BinOp("+", Var("b"), IntLit(12)))
BinOp("+", Var("b"), IntLit(12))