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>
我期望返回String
,但看到WrappedArray
。为什么?
如果我想返回一个字符串,该如何定义函数?
答案 0 :(得分:4)
我看到的joinWith
函数的唯一问题是将变量参数转换为数组的方式。 Array(values)
的结果具有类型Array[Seq[String]]
-我怀疑这就是您想要的。这根本没有必要。参数values
已作为Seq
传递给您。您可能打算写values.mkString(separator)
吗?
您看到的WrappedArray
文本是mkString
将值为Array
的内部Array("one", "two")
转换为字符串的结果。您没有获得类型为WrappedArray
的值(这甚至是不可能的,因为您已经明确键入了返回String)
的函数,所以得到的字符串值为WrappedArray(...)
答案 1 :(得分:1)
这对我有用:
def joinWith(separator: String, values: String*): String =
Array(values:_*).mkString(separator)
以下是REPL:
scala> def joinWith(separator: String, values: String*): String = Array(values:_*).mkString(separator)
joinWith: (separator: String, values: String*)String
scala> joinWith(":", "a", "s")
res7: String = a:s
我认为问题在于您需要将_*
指定为Array
。
如Suma所说,如果您未指定_*
,则在创建数组时的类型为Array[Seq[String]]
。