在函数joinToString中有4个带默认值的参数,在我看来,当我省略参数名时我应该按顺序传递参数值.
所以我认为守则 println(letters.joinToString( transform={ it.toLowerCase() } ) )是对的.
但实际上守则println(letters.joinToString { it.toLowerCase() } ) 也是对的,为什么呢?
fun <T> Collection<T>.joinToString(
separator: String = ", ",
prefix: String = "",
postfix: String = "",
transform: (T) -> String = { it.toString() }
): String {
val result = StringBuilder(prefix)
for ((index, element) in this.withIndex()) {
if (index > 0) result.append(separator)
result.append(transform(element))
}
result.append(postfix)
return result.toString()
}
fun main(args: Array<String>) {
val letters = listOf("Alpha", "Beta")
println(letters.joinToString { it.toLowerCase() } ) //It's Ok
println(letters.joinToString( transform={ it.toLowerCase() } ) ) //It's OK
}
Run Code Online (Sandbox Code Playgroud)
小智 6
因为您使用的是不同的语法.
如果方法的最后一个参数是方法引用,那么您可以省略括号并使用{括号传递函数.
it在这种情况下变成T你传入函数
println(letters.joinToString { it.toLowerCase() } )
Run Code Online (Sandbox Code Playgroud)
以下是您认为进入的内容.这不会编译,并且需要命名参数或params的顺序正确.您还必须将语法从使用更改it为使用常规功能语法
println(letters.joinToString(it.toLowerCase()))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
77 次 |
| 最近记录: |