c14*_*lie 3 scala class function parent
为什么Scala repl说:
<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)  
    }  
}
当你有一个内部类时Door,每个类的实例Car定义一个不同的Door类型.在is_door_open(d :)中Door,Door表示Car的封闭实例的Door.错误信息中的Car#Door类型意味着任何车门,它是所有车门的通用类型.
当你调用c.is_door_open(c.door)了Car的c.door必须是相同的c的c.is_door_open,因为这是申报is_door_open要求(这应该是d: Car#Door其他).而且,它们必须与编译器的满意度相同,编译器具有一些精确的规则.这里看起来很明显cars是相同的.不是这样,因为c是一个var,所以不是一个稳定的标识符.
想象一下代码c.is_door_open({c = new Car; c.door}).当然,但这表明你不能依赖于同一辆车的出现.
因此,在您的解决方案中,根据您的实际代码可能是:
c一个val而不是一个varis_door_open参数声明为d:Car#DoorDoor依赖于实例Car,在类外声明它,如果你想要它Car.Door,把它放在一个伴侣object Car而不是class Caris_door_open一个方法Door(不用Door参数)而不是Car.它可以完全访问封闭的Car(Car.this如java中所示,或者在Car中为此声明别名class Car {car =>)| 归档时间: | 
 | 
| 查看次数: | 875 次 | 
| 最近记录: |