无法理解`Array [Any]`上的`mkString`的Scala代码片段

时间:2018-03-21 14:48:10

标签: scala oop functional-programming

我是探索scala的初学者。以下是Scala函数。

def printArray[K](array:Array[K]) = array.mkString("Array(" , ", " , ")") 

val array2 = Array("a", 2, true)  
printArray(array2) 

输出是 数组(a,2,true)

我的怀疑 这里我们给出了数组类型为K. K意味着什么?这是什么意思吗? 如何成功' mkString'能够将输出作为数组(a,2,true)。 基本上我不理解连接部分。

感谢您的帮助。

3 个答案:

答案 0 :(得分:5)

mkString方法称为

arr.mkString(prefix, separator, suffix)

将在所有数组元素上调用toString,在prefix之前添加,然后连接由separator分隔它们的所有字符串,最后附加suffix

K中的类型参数printArray[K]被忽略,它可以被存在主义取代。这只是一个名字不好,签名混乱的方法。

当您将任何原始数据类型(如Int)与将AnyRef(如String)扩展到同一数组中的类型一起存储时,最小上限被推断为{ {1}},所以在

Any

printArray(array2) 设置为KAny如上所述工作,粘合在一起

mkString

产生字符串Array( prefix a "a".toString , separator 2 2.toString , separator true true.toString ) suffix

答案 1 :(得分:3)

K此处不是类型,它是一个类型参数,为了更直观,请查看其他问题Type parameter in scala

在此具体示例中K引用了Any - 满足所有3个值的最具体类型"a"2true

val array2: Array[Any] = Array("a", 2, true)  

mkString函数将所有集合项连接成单个字符串。它在项目和开头和结尾的一些字符串之间添加了分隔符。文档mkString

答案 2 :(得分:0)

如果您查看 REPL 中的array2定义,您会看到 array2的类型为Any 所有的父类型Scala中的其他类型

scala> val array2 = Array("a", 2, true)
//array2: Array[Any] = Array(a, 2, true) 

因此,当你调用函数def printArray[K](array:Array[K]) = array.mkString("Array(" , ", " , ")") K时,现在被视为Any,它返回一个字符串,其中 intitial String Array(和< em>结束字符串为)所有值,组成。

  
    

def mkString(start: String, sep: String, end: String): String = addString(new StringBuilder(), start, sep, end).toString