gpt4 book ai didi

scala - Scala 中的类类型参数。

转载 作者:行者123 更新时间:2023-12-02 16:17:59 24 4
gpt4 key购买 nike

我在编写一些应该非常简单的东西时遇到了困难,但我似乎无法获得正确的语法。

我有一个食物的类层次结构:

Food :> Vegetable :> Bamboo

对于动物:

Animal :> Herbivore :> Panda

我正在尝试在 Animal 中定义一个 eat 方法,以便 Pandas 一般不能吃蔬菜,只能吃竹子。目前,我的代码如下所示:

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")

我的麻烦是,当我创建蔬菜时, Pandas 可以吃它:

(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 就会丢弃类型信息。

关于scala - Scala 中的类类型参数。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42932385/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com