Я рассматриваю пример от Abstract Members. У нас есть следующий пример зависимых от пути типов.Пути-зависимые типы и генерические средства
class Food
abstract class Animal {
type SuitableFood <: Food
def eat(food: SuitableFood): String
}
class DogFood extends Food
class Dog extends Animal {
type SuitableFood = DogFood
override def eat(food: DogFood): String = food.toString
}
val lassie = new Dog
lassie eat new lassie.SuitableFood
Скажем, мы хотим работать с съедать в классе следующим образом
class D[T <: Animal] {
def blah(t: T, p: T): String = {
t.eat(t)
}
}
я получаю type mismatch; expected t.SuitableFood, actual: T
. Я вижу, что я вхожу в воды дженериков и зависимых от пути типов. Буду признателен за любую помощь.
Благодаря
'T' не типа' SuitableFood', это 'Animal'. Есть ли опечатка в 't.eat (t)'? – marstran
Как я могу сказать, что это тип 'ApproFood'? – zaxme
Я думаю, вы можете просто добавить параметр типа в функцию: 'def blah [F <: ApproFood] (t: T, food: F): String = t.eat (food)'. – marstran