让我发疯!
我有以下简单的代码段:
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) }
这里有什么问题的想法吗?如果我省略了编译中的最后两个参数,但是我应该能够像往常一样传递它们……
答案 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)
但是很奇怪,当我有方法时,我使用具有默认值的命名参数编写了自己,而在调用该方法时不必指定名称。