【发布时间】:2013-11-19 11:59:54
【问题描述】:
我只是在Scala 中处理抽象类型,我得到了一个错误
我正在尝试的示例:
scala> class Food
abstract class Animal {
type SuitableFood <: Food
def eat(food: SuitableFood)
}
defined class Food
defined class Animal
scala> class Grass extends Food
class Cow extends Animal {
type SuitableFood = Grass
override def eat(food: Grass) {}
}
defined class Grass
defined class Cow
scala> class Fish extends Food
defined class Fish
scala> val bessy: Animal = new Cow
bessy: Animal = Cow@5c404da8
scala> bessy.eat(new bessy.SuitableFood)
<console>:13: error: class type required but bessy.SuitableFood found
bessy.eat(new bessy.SuitableFood)
^
scala> bessy.eat(bessy.SuitableFood)
<console>:13: error: value SuitableFood is not a member of Animal
bessy.eat(bessy.SuitableFood)
scala> bessy.eat(new Grass)
<console>:13: error: type mismatch;
found : Grass
required: bessy.SuitableFood
bessy.eat(new Grass)
这些错误是什么?
为什么我不能将new Grass 作为参数传递给eat 方法,而当我创建一个像这样的对象时
scala> val c=new Cow
c: Cow = Cow@645dd660
scala> c.eat(new Grass)
你能给我一些想法吗?
【问题讨论】:
标签: scala abstract path-dependent-type