传播算子函数调用歧义

Teg*_*shi 3 intellij-idea kotlin

将java StringTokenizer转换为kotlin split时,我无法提供字符分隔符列表:

val delim : Array<Char> = arrayOf('(',')','{','}','[',/*many more...*/)
sourceExpr.split(delimiters=*delim,ignoreCase=false,limit=0)
Run Code Online (Sandbox Code Playgroud)

这里kotlin编译器出于某种原因无法消除split(vararg String,...)和之间的歧义split(vararg Char,...).问题:

  1. 是个bug吗?
  2. 有铸造解决方法吗?
  3. 古代前集合时代的vararg概念是如何渗透现代编程语言的?

kco*_*ock 6

问题不是消歧,而是不正确的类型.在Kotlin中,Array<Char>等同于Java Character[].这意味着当你使用时*delim,你实际上是在创建一个vararg Character(而不是vararg Char).

相反,您应该更喜欢原始特定的CharArray:

val delim: CharArray = charArrayOf('(', ')', '{', '}')
sourceExpr.split(delimiters = *delim, ignoreCase = false, limit = 0)
Run Code Online (Sandbox Code Playgroud)