Set
的type参数是不变的,因此显然这是行不通的:
val set: Set[Any] = Set[Int](1, 2, 3)
但是为什么行得通呢?
val set: Set[Any] = Set[Int](1, 2, 3).map(identity)
有人可以解释吗?谢谢
答案 0 :(得分:6)
首先,identity
使用类型参数。在这种情况下,identity
的类型参数被推断为Any
,因此传递给map
的是identity[Any]
(Any => Any
函数)。 map
期望某个类型Int => A
的{{1}}。由于函数的参数类型是互变的,因此可以在其中传递A
。因此,您的代码要做的是通过将原始集合的每个元素映射为类型Any => Any
来创建一个新集合。完整类型可以这样写出来:
Any