Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala Seq[&x2B;A]在A中如何是协变的?_Scala_Covariance - Fatal编程技术网

Scala Seq[&x2B;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

如果A发生在逆变位置,序列[+A]在A中如何协变:

def :+ (elem: A) : Seq[A] ?
据我所知,方法参数类型是一种逆变位置。我错过了什么

这就是用例签名。它不是一个真正的签名,只是您在常见用例中通常会看到的签名

真正的签名是:

def :+ [B >: A, That] ( elem : B )(implicit bf : CanBuildFrom[Seq[A], B, That] ) : That

正如你所看到的,它甚至不能保证一个
Seq
返回,更不用说
a

根据Daniel所说的,收集方法返回一个新的收集,这些方法可以扩展类型。因此,是的,a
Seq[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。