scala - 在方法中定义的 Array("one", "two").mkString(":") 返回 WrappedArray,而不是 String

Wes*_*Gun 2 methods scala

scala>   def joinWith(separator: String, values: String*): String = {
     |     Array(values).mkString(separator)
     |   }
joinWith: (separator: String, values: String*)String

scala> joinWith(":", "one", "two")
res0: String = WrappedArray(one, two)   // shouldn't we get a String here?

scala> Array("one", "two").mkString(":")
res1: String = one:two                  // this works as expected but only like this

scala>
Run Code Online (Sandbox Code Playgroud)

我期待一个String返回,但我看到一个WrappedArray. 为什么?

如果我想返回一个字符串,应该如何定义函数?

Sum*_*uma 5

我在您的joinWith函数中看到的唯一问题是您将变量参数转换为数组的方式。结果Array(values)有一个类型Array[Seq[String]]- 我怀疑这是你想要的。这完全没有必要。参数values已经传递Seq给你了。你可能打算写values.mkString(separator)吗?

WrappedArray您看到的文本是mkStringArray值为的内部转换Array("one", "two")为字符串的结果。你没有得到一个类型的值WrappedArray(这甚至是不可能的,因为你已经明确地输入了你的函数来返回 a String),你会得到一个带有值的字符串WrappedArray(...)