我是探索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' 如何能够将输出作为 Array(a, 2, true(。基本上我不明白串联部分。
感谢您的帮助。
的mkString
方法
arr.mkString(prefix, separator, suffix)
将在所有数组元素上调用toString
,在prefix
前面,然后连接所有字符串,用separator
分隔它们,最后附加suffix
。
printArray[K]
中的类型参数K
将被忽略,它可以替换为存在参数。这只是一种名称不好和签名混乱的方法。
当您将任何基元数据类型(如Int
(与扩展AnyRef
的类型(如String
(一起存储到同一数组中时,推断出最小上限为Any
,因此在
printArray(array2)
K
设置为 Any
,并且mkString
如上所述工作,粘合在一起
Array( prefix
a "a".toString
, separator
2 2.toString
, separator
true true.toString
) suffix
产生字符串Array(a,2,true)
.
K
在这里不是一个类型,它是一个类型参数,为了更直观,请查看其他问题 scala 中的类型参数
在这个特定示例中,K
由Any
推断 - 满足所有 3 个值的最具体类型 "a"
、 2
和 true
val array2: Array[Any] = Array("a", 2, true)
mkString
函数将所有集合项联接到单个字符串中。它在项目和开头和结尾添加分隔符和一些字符串。文档 mkString
如果你在 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
,它返回一个字符串,其中初始字符串为Array(
,结束字符串为)
,所有值由,
分隔。
def mkString(start: String, sep: String, end: String): String = addString(new StringBuilder(), start, sep, end).toString