快把我逼疯!
我有以下简单的代码片段:
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) }
对这里的问题有什么想法吗?如果我省略了编译中的最后两个参数,但是我应该能够像往常一样传递它们……
最佳答案
通常,除非有可选参数,否则vararg参数是函数签名中的最后一个参数。因此,这是一个非常有趣的组合案例。因为使用vararg可能有多个值,所以必须显式命名可选参数。
例如,您可以分割多个定界符字符串:
val secondSplitStr = "e"
val result = text.split(splitStr, secondSplitStr, ignoreCase = false, limit = 1)
只需注意该限制= 1,因为默认值为0,它可能不会产生您想要的效果。