【发布时间】:2018-10-02 11:45:45
【问题描述】:
我需要进行以下转换,columnNames 应该是Seq[String],但它始终是Seq[Any]。
我该如何解决这个任务?
val cols = Seq("col1","col2")
val columnNames: Seq[String] = cols ++ "col3"
【问题讨论】:
标签: scala collections
我需要进行以下转换,columnNames 应该是Seq[String],但它始终是Seq[Any]。
我该如何解决这个任务?
val cols = Seq("col1","col2")
val columnNames: Seq[String] = cols ++ "col3"
【问题讨论】:
标签: scala collections
++ 是两个集合上的二元运算符(方法)。但是:+ 或+: 是将element 添加到collection 的运算符(collection 应始终与: 相邻,而要添加到集合中的element 应始终为与:+中的+相邻,即,它应该分别用作collection :+ element或element +: collection到append或prependelement到collection。所以,cols :+"col3"将给我们预期的答案,因为这样"col3" 将被视为string element 添加到cols collection。
在使用 cols ++ "col3" 时,String "col3" 被编译器视为一个集合,即,List('c','o','l','3'), cols 是一个字符串集合。因此生成的集合是List[Any],因为它包含字符串和字符,所以String 和Char 的超类型被编译器推断为Any。
【讨论】:
你应该这样做:
val columnNames: Seq[String] = cols :+ "col3"
或
val columnNames: Seq[String] = cols ++ Seq("col3")
在您的情况下,结果是Seq[Any],因为Any 是String 和Char 的通用超类型
【讨论】:
String 和 Char 的常见超类型”
col3 吗?
应该是:
val columnNames: Seq[String] = cols :+ "col3"
:+ 是 someVariable.next() 返回的任何类型的方法。
你得到 Class Any 是 Scala 类层次结构的根。 Scala 执行环境中的每个类都直接或间接继承自此类。
【讨论】: