Class Scala 中的类型参数。
Class type parameters in Scala.
我很难写出本应非常直截了当的东西,但我似乎无法正确使用语法。
我有一个 class 食物层次结构:
Food :> Vegetable :> Bamboo
对于动物:
Animal :> Herbivore :> Panda
而且我正在尝试在 Animal 中定义一个 eat 方法,这样 Pandas 不能吃一般的 Vegetables,只能吃 Bamboo。目前,我的代码如下所示:
class Food(val name : String)
class Vegetable(name: String) extends Food(name)
class Bamboo extends Vegetable("bamboo")
class Animal[F <: Food](val name : String) {
def eat[T <: F](f : T) = println(s"$name eats some yummy ${f.name}")
}
class Herbivore[F <: Vegetable](name :String) extends Animal[Vegetable](name)
class Panda extends Herbivore[Bamboo]("panda")
我的问题是,当我创建蔬菜时,熊猫可以吃它:
(new Panda) eat (new Vegetable("potato"))
所以出了点问题:(
非常欢迎任何帮助:)
您需要更改:
class Herbivore[F <: Vegetable](name :String) extends Animal[Vegetable](name)
至:
class Herbivore[F <: Vegetable](name :String) extends Animal[F](name)
否则你会因为不使用 F 而丢弃类型信息。
我很难写出本应非常直截了当的东西,但我似乎无法正确使用语法。
我有一个 class 食物层次结构:
Food :> Vegetable :> Bamboo
对于动物:
Animal :> Herbivore :> Panda
而且我正在尝试在 Animal 中定义一个 eat 方法,这样 Pandas 不能吃一般的 Vegetables,只能吃 Bamboo。目前,我的代码如下所示:
class Food(val name : String)
class Vegetable(name: String) extends Food(name)
class Bamboo extends Vegetable("bamboo")
class Animal[F <: Food](val name : String) {
def eat[T <: F](f : T) = println(s"$name eats some yummy ${f.name}")
}
class Herbivore[F <: Vegetable](name :String) extends Animal[Vegetable](name)
class Panda extends Herbivore[Bamboo]("panda")
我的问题是,当我创建蔬菜时,熊猫可以吃它:
(new Panda) eat (new Vegetable("potato"))
所以出了点问题:(
非常欢迎任何帮助:)
您需要更改:
class Herbivore[F <: Vegetable](name :String) extends Animal[Vegetable](name)
至:
class Herbivore[F <: Vegetable](name :String) extends Animal[F](name)
否则你会因为不使用 F 而丢弃类型信息。