Scala Seq[&x2B;A]在A中如何是协变的?
如果A发生在逆变位置,序列[+A]在A中如何协变:Scala Seq[&x2B;A]在A中如何是协变的?,scala,covariance,Scala,Covariance,如果A发生在逆变位置,序列[+A]在A中如何协变: def :+ (elem: A) : Seq[A] ? 据我所知,方法参数类型是一种逆变位置。我错过了什么 这就是用例签名。它不是一个真正的签名,只是您在常见用例中通常会看到的签名 真正的签名是: def :+ [B >: A, That] ( elem : B )(implicit bf : CanBuildFrom[Seq[A], B, That] ) : That 正如你所看到的,它甚至不能保证一个Seq返回,更不用说a根据Dan
def :+ (elem: A) : Seq[A] ?
据我所知,方法参数类型是一种逆变位置。我错过了什么 这就是用例签名。它不是一个真正的签名,只是您在常见用例中通常会看到的签名
真正的签名是:
def :+ [B >: A, That] ( elem : B )(implicit bf : CanBuildFrom[Seq[A], B, That] ) : That
正如你所看到的,它甚至不能保证一个
Seq
返回,更不用说a
根据Daniel所说的,收集方法返回一个新的收集,这些方法可以扩展类型。因此,是的,aSeq[a]
只能包含a
s,但是您的新Seq
可以将其类型加宽,这样它可以包含的不仅仅是a
。用例签名使用:+(elem:a):Seq[a]
而不是:+[B>:a](elem:B):Seq[B]
。@Kris我同意::+[B>:A](elem:B):Seq[B]
更直观。我们能让Scala的人更改API文档吗?@Misha确定。转到Scala问题跟踪和开发wiki(),打开一个增强标签。不过,我不确定正确的分类是library还是scaladoc。