Scala 将表达式转换为字符串

Scala 将表达式转换为字符串,scala,Scala,我编写了这个函数,它应该返回表示算术表达式的字符串 import scala.util.parsing.combinator._ object ArithEval extends ArithEvalLike { def eval (e:Expr):Double = e match { case Num(a) => a case Exponent(a,b) => Math.pow(eval(a),eval(b)) case Add(a,b) =&

我编写了这个函数,它应该返回表示算术表达式的字符串

     import scala.util.parsing.combinator._

object ArithEval extends ArithEvalLike {


def eval (e:Expr):Double = e match {
    case Num(a) => a
    case Exponent(a,b) => Math.pow(eval(a),eval(b))
    case Add(a,b) =>eval(a) + eval(b)
    case Sub(a,b) =>eval(a) - eval(b)
    case Mul(a,b) =>eval(a) * eval(b)
    case Div(a,b) =>eval(a) / eval(b)
   }
}


object ArithPrinter extends ArithPrinterLike {
def print (e: Expr ): String = e match {
    case Num(a) => "a"
    case Exponent(a,b) =>print(a).toString  + "^" + print(b).toString
    case Add(a,b) => print(a).toString  + "+" + print(b).toString
    case Sub(a,b) => print(a).toString  + "-" + print(b).toString
    case Mul(a,b) =>print(a).toString  + "*" + print(b).toString
    case Div(a,b) =>print(a).toString  + "/" + print(b).toString
   }
}
这似乎不正确,因为我的一些测试失败了

以下是我运行的测试:

scala>ArithPrinter.print(Mul(Num(2.0)、Mul(Add(Num(3.0)、Num(5.0))、Num(-10.0)))

它说找不到'Num'

我不知道是我的测试错了还是函数本身错了

我走对了吗

case Num(a) => "a"

这看起来不对。你只是在打印“a”,字符串。您可能需要a.toString

失败的测试是什么?你能发布整个代码吗?发布失败的测试代码。如果没有'Num
Add'等的定义,我们就说不出来。如果它说“找不到Num”,可能没有定义
Num
(或者是错误的类型),那么Num的构造函数是什么?您可能已经创建了一个case类,该类接受Int,但要传递一个float?