scala - Массив ("один", "два"). mkString (":"), определенный в методе, возвращает WrappedArray, а не строку - PullRequest
0 голосов
/ 27 декабря 2018
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.Почему?

Как определить функцию, если я хочу вернуть строку?

Ответы [ 2 ]

0 голосов
/ 27 декабря 2018

Единственная проблема, которую я вижу с вашей функцией joinWith, - это способ преобразования переменных аргументов в массив.Результат Array(values) имеет тип Array[Seq[String]] - я сомневаюсь, что это то, что вы хотите.Это совсем не обязательно.Аргументы values уже переданы вам как Seq.Возможно, вы намеревались написать values.mkString(separator)?

Текст WrappedArray, который вы видите, является результатом mkString преобразования внутреннего Array со значением Array("one", "two") в строку.Вы не получаете значение с типом WrappedArray (это было бы даже невозможно, так как вы явно набрали свою функцию для возврата String), вы получите строку со значением WrappedArray(...)

0 голосов
/ 27 декабря 2018

Это работает для меня:

def joinWith(separator: String, values: String*): String =
    Array(values:_*).mkString(separator)

Вот ответ:

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.

Как говорит Сума, если вы не укажете _*, у вас будет тип Array[Seq[String]] при создании массива.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...