-1

我不知道如何从我的代码中抛出的异常中打印出表达式的确切名称:http: //pastie.org/private/jfszprszt7uxng2ajahcg

我需要的是它打印WrongTypeInExpression(BinOp("+",Var("b"),IntLit(12)))但实际上它打印WrongTypeInExpression(BinOp(+,Var(b),IntLit(12)))

请问你能帮帮我吗?

我试图改变这些东西,但它们产生了相同的结果:

case e:WrongTypeInExpression => println("WrongTypeInExpression(" + e.expr.toString() + ")")
4

1 回答 1

2

仅出于显示问题的目的,您在 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))
于 2012-10-31T15:19:35.170 回答