-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

問題を表示するためだけに、pastie.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 に答える