Ich schaue mir ein Beispiel aus Abstract Members an. Wir haben das folgende Beispiel für pfadabhängige Typen.Wegabhängige Typen und Generika
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
sagen wir in einer Klasse in der folgenden Weise mit essen arbeiten wollen
class D[T <: Animal] {
def blah(t: T, p: T): String = {
t.eat(t)
}
}
ich type mismatch; expected t.SuitableFood, actual: T
. Ich sehe, dass ich in das Wasser von Generika und wegabhängigen Typen eintrete. Ich würde mich über jede Hilfe freuen.
Dank
'T' ist nicht vom Typ' SuitableFood', es ist ein 'Tier: ein Tier. Gibt es einen Tippfehler in 't.eat (t)'? – marstran
Wie soll ich sagen, dass es vom Typ 'SuccessfulFood' ist? – zaxme
Ich denke, Sie können einfach einen Typparameter zu der Funktion hinzufügen, wie folgt: 'def blah [F <: Geeignetes Essen] (t: T, Essen: F): String = t.eat (Essen)'. – marstran