私は以下のケースクラスを持っています。式はボックス化された数学演算と数値です。例えば、addは式のサブクラスであり、式のサブクラスでもあるnumという2つのフィールドを再帰的に含みます。ケースクラスのフィールドをスカラーに追加
abstract class Expression
case class num (num: Int) extends Expression
case class add (left: Expression, right: Expression) extends Expression
abstract class Result
case class numericResult (v : Int) extends Result
は
は方法は、式を取ることが、その後の操作を実行VHS版と結果でボックスで結果を返すことになって評価するだけでなく、私は削除することはできませんので、ケースクラス戻り、他の種類がありますクラス
def evaluate(expr: Expression) : Result = {
expr match {
case num(n) => new numericResult(n)
case add(l, r) => new numericResult(evaluate(l).v + evaluate(r).v) //add will never be called on imaginary numbers
case addi(l, r) => new imaginaryResult(...) //adds imaginary numbers
}
}
しかし、私はそれを評価しようとすると、私はエラーを取得する:
error: value v is not a member of Result
Scalaは、lとrがnum型であることを知っていることを確認するにはどうすればよいですか?評価すると、ResultではなくnumericResultが返されますか?私は、評価(l)と評価(r)がnumericResutを返す場合、lとrは私が入れ子になるかもしれないと思います。ここで
を? – Tair
def evaluate(expr:Expression):numericResult = ... – Tair
評価が返すことができるタイプは他にもあります –