在Scala中,为什么Array("1")++"-3"输出Array [Any] = Array(1, - ,3)?

Arc*_*her 7 scala

为什么在Scala 2.12.6中Array("1") ++ "-3"输出res1: Array[Any] = Array(1, -, 3)

我如何得到结果Array("1", "-3")

Jam*_*ley 8

++运算符连接两个列表(或其他集合)在一起.因为String基本上只是一个Chars列表,因为@ senjin.hajrulahovic指出编译器以这种方式处理它(并返回一个Array[Any].

你可以通过多种方式解决这个问题.例如,Array("1") ++ Array("-3")(将两个数组一起添加)或Array("1") :+ "-3"将值放在数组的末尾.


RAG*_*AMM 3

++binary operator(也称为方法),用于连接两个集合。例如。ArrayLists。如果第一个操作数是Array,则结果默认为Array。如果第一个操作数是 a List,则结果默认为List

默认情况下,编译器将"-3"其视为String. 所有字符串也可以被视为集合(在需要时通过隐式转换)。但什么类型的收藏呢?是吗Array?是吗List?取决于它的用法和它所操作的集合类型。

例如,当将其用作 时Array("1") ++ "-3"the String "-3"默认情况下将被编译器视为Array[Char]因为第一个操作数++是 an (尽管编译器默认情况下Array元素的类型始终为)当将其用作 时,默认情况下将被视为因为的第一个操作数是 a (尽管编译器默认情况下元素的类型始终是)CharList("1") ++ "-3"the String "-3"List[Char]++ListChar

++运算符遇到两个操作数都是不同类型元素的集合时,它们super-typetype-hierarchy, 中最接近的将是结果集合的元素类型。of是第一个操作数(集合)的元素类型,而是第二个super-type操作数(集合)的元素类型。所以结果 是.StringCharAnyArray("1") ++ "-3"Array[Any]

如果要将String "-3"作为元素添加到集合 中Array("1"),则必须将其作为元素添加到该集合中。还有另一种方法,即,:++:将元素附加或添加到集合中,如下所示。

追加到集合中:

scala> Array("1") :+ "-3"
res6: Array[String] = Array(1, -3)
Run Code Online (Sandbox Code Playgroud)

要添加到集合前面:

scala> "-3" +: Array("1")
res7: Array[String] = Array(-3, 1)
Run Code Online (Sandbox Code Playgroud)

执行上述操作的另一种方法如下(将元素转换为集合并使用++方法):

scala> Array("1") ++ Array("-3")
res9: Array[String] = Array(1, -3)

scala> Array("-3") ++ Array("1")
res10: Array[String] = Array(-3, 1)

scala>
Run Code Online (Sandbox Code Playgroud)