Котлин Коанс: Именованные аргументы решения - PullRequest
0 голосов
/ 23 февраля 2019

Я практикую Kotlin на Kotlin Koans и до Именованные аргументы Вопрос.

Именованные аргументы

По умолчанию и именованные аргументы помогают минимизировать количество перегрузок и улучшить читаемость вызова функции.Библиотечная функция joinToString объявлена ​​со значениями по умолчанию для параметров:

fun joinToString(
    separator: String = ", ",
    prefix: String = "",
    postfix: String = "",
    /* ... */
): String

Она может быть вызвана для набора строк.Указывая только два аргумента, функция joinOptions () возвращает список в формате JSON (например, «[a, b, c]»)

Ответ:

fun joinOptions(options: Collection<String>) = options.joinToString(prefix = "[", postfix = "]")

добавляет «[» в начало и «]» в конец коллекции.Однако я попытался напечатать коллекцию с joinOptions() и без него, и они оба имеют одинаковый результат:

val collection: Collection<Int> = listOf(1, 2, 3)
fun joinNumbers(numbers: Collection<Int>) = numbers.joinToString(prefix = "[[", postfix = "]")
println(collection) // prints [1, 2, 3]
println(joinNumbers((collection))) // prints [1, 2, 3]

Так что мне просто любопытно, что я что-то упустил?- для чего они собирались в этом вопросе?

1 Ответ

0 голосов
/ 23 февраля 2019

println(collection) вызывает метод toString() для объекта Collection, и некоторые коллекции будут печатать свое содержимое в следующем формате:

[1, 2, 3]

, что действительно эквивалентно вызову

collection.joinToString(prefix = "[", delimiter = ", ", postfix = "]")

Вы не можете изменить это поведение, поэтому, например, если вы хотите напечатать каждый элемент в коллекции в отдельной строке, вам придется написать собственную реализацию toString().Здесь вам пригодится joinToString(), вы можете просто сделать

collection.joinToString(delimiter = "\n")

Обратите внимание, что вам не нужно передавать аргументы для prefix или postfix, поскольку значения по умолчанию соответствуют вашему варианту использования.

Пример Koans, возможно, может быть менее запутанным, но он иллюстрирует использование именованных аргументов и значений по умолчанию.

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