gpt4 book ai didi

android - 为什么它有时代表整个字符串,有时代表 Kotlin 中的每个字符?

转载 作者:太空宇宙 更新时间:2023-11-03 12:02:42 25 4
gpt4 key购买 nike

在代码 A 中,这个it 是电子邮件 "yole@example.com" ,在代码 B 中,这个 it 是每个字符 'a' , 'b' , '1' , 'c'"ab1c" ,为什么?

代码A

fun main(args: Array<String>) {
var email: String? = "yole@example.com"
email?.let { sendEmailTo(it) } //This it is the email "yole@example.com"
}

fun sendEmailTo(email: String) {
println("Sending email to $email")
}

代码B

fun main(args: Array<String>) {
println("ab1c".filter { it in 'a'..'z' }) //This it is char 'a', 'b,' '1','c' of "ab1c"
}


fun String.filter(predicate: (Char) -> Boolean): String {
val sb = StringBuilder()
for (index in 0 until length) {
val element = get(index)
if (predicate(element)) sb.append(element)
}
return sb.toString()
}

添加的内容

代码 C

如果我使用其他扩展有趣的名称,我会得到相同的结果。

fun main(args: Array<String>) {
println("ab1c".myFun { it in 'a'..'z' }) //This it is char 'a', 'b,' '1','c' of "ab1c"
}

fun String.myFun(predicate: (Char) -> Boolean): String {
val sb = StringBuilder()
for (index in 0 until length) {
val element = get(index)
if (predicate(element)) sb.append(element)
}
return sb.toString()
}

更新内容

我觉得这个it代表的是基于这些扩展乐趣的细节。正确的?所以有时候我需要阅读一个有趣的扩展的源代码!

这个email?.let { sendEmailTo(it) }代表email因为好玩block需要这个。

来源 A

public inline fun <T, R> T.let(block: (T) -> R): R {
contract {
callsInPlace(block, InvocationKind.EXACTLY_ONCE)
}
return block(this)
}

这个"ab1c".filter { it in 'a'..'z' }代表 char 因为有趣 predicate require 在此 String 对象中的 char 并执行 for 循环操作。

来源 B

fun String.filter(predicate: (Char) -> Boolean): String {
val sb = StringBuilder()
for (index in 0 until length) {
val element = get(index)
if (predicate(element)) sb.append(element)
}
return sb.toString()
}

最佳答案

如您所知, 指的是传递给闭包的单个参数。

filter 接受类型为 (Char) -> Boolean 的闭包,所以 it 的类型是 Charitab1c 中的每个字符的原因是因为filter 是如何实现的。 filter 遍历序列并根据谓词检查每个元素。

另一方面,

let 是一种完全不同的方法,因此它们的行为不同是很自然的。 let 接受类型为 (String) -> Unit 的闭包(假设 sendEmail 返回 Unit)。它所做的只是以 this 作为参数调用闭包,因此 it 指的是您调用的 let on。

关于android - 为什么它有时代表整个字符串,有时代表 Kotlin 中的每个字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51529528/

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