【发布时间】:2013-01-17 20:36:40
【问题描述】:
我的印象是,Scala List 中的每个对象都必须具有相同的类型,如果我们需要拥有不同类型的集合,则应该使用元组。
来自Scala的documentation,List是
不可变链表的类表示有序集合 类型的元素。
scala> val l1 = List(1,2,3)
l1: List[Int] = List(1, 2, 3)
scala> val l1 = List(1,2,3, "oh really?!")
l1: List[Any] = List(1, 2, 3, oh really?!)
似乎并非如此。毕竟Any 本身就是一个有效的Scala 类型,一切都可以简化为它。
请澄清
【问题讨论】:
-
List[T]可以包含任何类型与T兼容的值,而不仅仅是那些完全是T的值。当您编写List文字(例如List(1, 2, 3, "string"))时,编译器会找到一个包含参数中所有值的类型的超类型。当您混合来自AnyVal(原始类型)和AnyRef(类类型)的类型时,唯一常见的超类型是Any,这就是您的第二个示例中发生的情况。