我是scala的新手并且有一些继承问题...... 我的NodeVisitor类无法区分GreenBasket中的“b1”和“b2”,并提供并错误说明篮子中没有“访问”方法。 GreenBasket必须能够使用“b1”和“b2”保持GreenBasket或OrangeBasket对象。 我如何根据“b1”和“b2”的类型调用适当的“访问”方法? 谢谢。
trait Visitor{
def visit(o: OrangeBasket): Int
def visit(g: GreenBasket): Int
}
sealed abstract class Basket() {
def accept(visitor: Visitor): Unit
}
case class OrangeBasket(count: Int, kilos: Double) extends Basket(){
def this(count: Int) = this(count, 0)
def accept(visitor: Visitor) = visitor.visit(this)
}
case class GreenBasket(b1: Basket, b2: Basket) extends Basket(){
def this(b1: Basket) = this(b1, null)
def this() = this(null)
def accept(visitor: Visitor) = visitor.visit(this)
}
class NodeVisitor() extends Visitor{
def visit(o: OrangeBasket) = 1
def visit(g: GreenBasket) = this.visit(g.b1) + this.visit(g.b2) + 1
}
答案 0 :(得分:0)
如果我理解正确,你应该以不同方式调用这些方法。怎么样:
class NodeVisitor() extends Visitor{
def visit(o: OrangeBasket) = 1
def visit(g: GreenBasket) = g.b1.accept(this) + g.b2.accept(this) + 1
}
请注意,您应该更改接受方法签名。