String.split无法在Kotlin中编译?

时间:2019-03-02 22:57:17

标签: string kotlin split compiler-errors

让我发疯!

我有以下简单的代码段:

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 :(得分:1)

通常,除非有可选参数,否则vararg参数是函数签名中的最后一个参数。因此,这是一个非常有趣的组合案例。因为使用vararg可能有多个值,所以必须显式命名可选参数。

例如,您可以分割多个定界符字符串:

I/Choreographer: Skipped 170 frames!  The application may be doing too much work on its main thread.
D/NetworkSecurityConfig: No Network Security Config specified, using platform default
I/APIRes: error : null

仅当注意该限制= 1时,由于默认值为0,它可能不会产生您想要的效果。

答案 1 :(得分:0)

啊,你必须命名参数。

这样可以编译:

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

但是很奇怪,当我有方法时,我使用具有默认值的命名参数编写了自己,而在调用该方法时不必指定名称。