gpt4 book ai didi

android - 为什么我可以在 Kotlin 中不传递参数名称来调用一个 fun?

转载 作者:行者123 更新时间:2023-11-29 14:43:28 24 4
gpt4 key购买 nike

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

}

最佳答案

因为您使用的是不同的语法。

如果一个方法的最后一个参数是一个方法引用,那么你可以省略括号,只用 { 括号传入函数。

it 在这种情况下变成 T 你传递给函数

println(letters.joinToString { it.toLowerCase() } )

以下是您认为输入的内容。这不会编译,并且需要命名参数或参数的顺序正确。您还必须将语法从使用 it 更改为使用常规函数式语法

println(letters.joinToString(it.toLowerCase()))

关于android - 为什么我可以在 Kotlin 中不传递参数名称来调用一个 fun?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51529710/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com