Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.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';s_uu与任何/无_Scala_Wildcard_Covariance_Contravariance_Type Systems - Fatal编程技术网

理解scala';s_uu与任何/无

理解scala';s_uu与任何/无,scala,wildcard,covariance,contravariance,type-systems,Scala,Wildcard,Covariance,Contravariance,Type Systems,如果一个类有一个convariant类型参数,比如,声明 def foo(bar: Iterable[_]) def foo(bar: Growable[_]) 及 ? 如果一个类有一个逆变类型参数,比如,声明 def foo(bar: Iterable[_]) def foo(bar: Growable[_]) 及 ?当泛型参数有界时,它确实会产生一些差异。例如,如果你有 class BoundedIterable[+A <: Something] class BoundedG

如果一个类有一个convariant类型参数,比如,声明

def foo(bar: Iterable[_])
def foo(bar: Growable[_])

?


如果一个类有一个逆变类型参数,比如,声明

def foo(bar: Iterable[_])
def foo(bar: Growable[_])


当泛型参数有界时,它确实会产生一些差异。例如,如果你有

class BoundedIterable[+A <: Something]
class BoundedGrowable[-A >: Something]
类可编辑[+A:Something]
然后键入
boundeditable[Any]
BoundedGrowable[Nothing]
将是非法的


我不知道是否还有其他区别,但我可以肯定地说,只要可能,您应该更喜欢无通配符的变体。这是因为,实际上,声明站点类型差异的目的就是为了消除通配符(这是一种使用站点差异的形式)。当你说
List[Any]
时,你的意思是“列出任何事情”,但当你说
List[\u]
时,你的意思是“列出我们不知道的事情”。因此,前者更为明确,即使它们在某些特定情况下可能是等价的。

如果类型参数由
某物
限定,我们可以简单地使用
某物
代替
任何
/
。在这种情况下,我们可以编写
def foo(bar:MyBoundedType[Something])
(对于协变和逆变两种情况)。@Peter这是真的。这就是为什么我称之为“一点”不同:)可能的重复不是一个精确的重复,但足够接近。我会让别人来判断。