Scala 自引用泛型
我四处搜索了一下,但找不到这种结构的示例:Scala 自引用泛型,scala,Scala,我四处搜索了一下,但找不到这种结构的示例: Person[P <: Person[P]] Person[P该结构本身在中有解释,称为F-有界多态性 // you define it like this trait X extends Person[X] // it then gets expanded to this trait Person[X extends Person[X]] 当特征需要引用其扩展对象的类型时,使用此结构。如果Scala学派的解释不够,您可以在internet
Person[P <: Person[P]]
Person[P该结构本身在中有解释,称为F-有界多态性
// you define it like this
trait X extends Person[X]
// it then gets expanded to this
trait Person[X extends Person[X]]
当特征需要引用其扩展对象的类型时,使用此结构。如果Scala学派的解释不够,您可以在internet上搜索“F-有界多态性”这有时被称为自类型(不要与Scala明确类型的自引用混淆)它通常用于具有足够强的方法签名,以表示该方法使用与接收方相同类型的对象
让我们看一个例子。比如说,你有一个基本特征动物
,带有一个通用的品种
方法,它接受另一个动物
,并返回一个动物
trait Animal {
def breed(a: Animal): Animal
}
好的,但实际上您需要的是一个bride
方法,它表示每个具体的动物只与同一类的动物一起繁殖,并且还返回同一类的动物
class Cow extends Animal {
def breed(c: Cow) = new Cow
}
不可能,因为此
品种的签名不匹配。也不可能重写,因为您需要协变地更改参数类型,这是禁止的
自救类型:
trait Animal[A <: Animal[A]] {
def breed(a: A): A
}
class Cow extends Animal[Cow] {
def breed(c: Cow) = new Cow
}
trait动物[一个F-有界多态性…是的,我永远也找不到。谢谢,我想我现在明白了。在最后一行中,你的扩展了,你是说我一直在跳来跳去选择这两个中的一个。你认为感谢这个例子,以及我认为我现在真正理解的来自EECOLOR的链接吗这对我面前的代码有什么好处^^