我是探索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)。 基本上我不理解连接部分。
感谢您的帮助。
答案 0 :(得分:5)
mkString
方法称为
arr.mkString(prefix, separator, suffix)
将在所有数组元素上调用toString
,在prefix
之前添加,然后连接由separator
分隔它们的所有字符串,最后附加suffix
。
K
中的类型参数printArray[K]
被忽略,它可以被存在主义取代。这只是一个名字不好,签名混乱的方法。
当您将任何原始数据类型(如Int
)与将AnyRef
(如String
)扩展到同一数组中的类型一起存储时,最小上限被推断为{ {1}},所以在
Any
printArray(array2)
设置为K
,Any
如上所述工作,粘合在一起
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"
,2
和true
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