String.split не компилируется в Kotlin? - PullRequest
0 голосов
/ 03 марта 2019

Сводит меня с ума!

У меня есть следующий простой фрагмент кода:

val text = "hello"
val splitStr = "l"
text.split(splitStr, false, 1)

Но в третьей строке есть ошибка компиляции.В нем говорится:

None of the functions can be called with the arguments supplied.

Несмотря на то, что в Strings.kt есть метод split, который принимает следующие аргументы:

public fun CharSequence.split(vararg delimiters: String, ignoreCase: Boolean = false, limit: Int = 0): List<String> =
    rangesDelimitedBy(delimiters, ignoreCase = ignoreCase, limit = limit).asIterable().map { substring(it) }

Есть идеи о том, в чем здесь проблема?Если я опущу последние два аргумента в компиляции, но я смогу передать их, как я делаю ...

Ответы [ 2 ]

0 голосов
/ 03 марта 2019

Как правило, параметр vararg является последним параметром в сигнатуре функции, если нет дополнительных параметров.Так что это довольно интересный случай их комбинации.Поскольку в переменной vararg может быть несколько значений, необходимо явно указать необязательные параметры.

Например, вы можете разделить строки на несколько разделителей:

val secondSplitStr = "e"
val result = text.split(splitStr, secondSplitStr, ignoreCase = false, limit = 1)

Просто следите за этимlimit = 1, он может не дать желаемого эффекта, так как по умолчанию установлено значение 0.

0 голосов
/ 03 марта 2019

Ах, вы должны назвать аргументы.

Это прекрасно скомпилируется:

val count = text.split(skill, ignoreCase = false, limit = 1)

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

...