只是爲了顯示這個問題的目的,您的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))
這不是_The確切名_。那是引發exception_的源代碼。無論如何,如果你不喜歡case類如何打印出來,你可以手工重寫它們的'toString'方法。 –
你能告訴我你的toString實現嗎? 謝謝你的回答:)。 –
我沒有'toString'實現。我只是指出你可以寫一個你想要的東西。 –