Я просто собираюсь через абстрактного типа в 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 = [email protected]
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 = [email protected]
scala> c.eat(new Grass)
Не могли бы вы дать мне некоторое представление об этом?
+1 У меня был почти точно такой же ответ. Удаление с первого раза. – drstevens