为什么Scala爬虫会说:
<console>:10: error: type mismatch;
found : Car#Door
required: _1.Door where val _1: Car 当我运行以下语句时:
var c = New Car
c.is_door_open(c.door) 指的是这个类:
class Car {
var door = new Door(true)
class Door (var state: Boolean = true) { }
def is_door_open(d: Door) {
println(d.state)
}
}发布于 2011-09-21 21:28:49
当这里有一个内部类为Door时,Car类的每个实例都定义了一个不同的Door类型。在is_door_open(d:Door)中,门是指包围汽车实例的门。错误信息中的Car#Door类型意味着任何一辆汽车的门,它是所有车门的常见类型。
当您调用c.is_door_open(c.door)时,Car of c.door必须与c of c.is_door_open相同,因为这是is_door_open声明所需要的(否则应该是d: Car#Door )。而且,它们必须是相同的,使编译器满意,编译器对此有一些精确的规则。在这里,很明显,cars是一样的。不是这样,因为c是一个var,所以不是一个稳定的标识符。
想象一下代码c.is_door_open({c = new Car; c.door})。当然是人为的,但这表明你不能同时依靠c是同一辆车。
因此,在您的解决方案中,取决于您真正的代码是什么:
var
c成为一个val,而不是d: Car#Door
Door参数依赖于Car实例,在类之外声明它,如果您希望它是Car.Door,则将它放在一个伙伴object Car中,而不是在class Car
is_door_open一个Door的方法中(然后不使用Door参数)而不是Car。它可以完全访问封闭的汽车(在java中使用Car.this,或者用class Car {car =>在Car中声明别名)https://stackoverflow.com/questions/7506478
复制相似问题