gpt4 book ai didi

Kotlin 关于 @ 符号和返回后缀的澄清

转载 作者:行者123 更新时间:2023-12-03 16:31:10 24 4
gpt4 key购买 nike

我对下一个语法的含义用法感到困惑。

  • 在“返回”之后放置后缀“async”和“lazy”究竟有什么作用?
    return async

    return lazy
  • 这里的“@”符号是什么意思?
    return@async

    return@lazy

    return@withContext

  • 关于“@”符号,它在 Kotlin 中有特殊的命名吗?所以我可以更好地在文档中找到所有使用它的方法?
    添加@ 和不使用它有什么区别?所以:
    "return async" vs "return@async"

    最佳答案

    1. What does exactly do placing the postfixes "async" and "lazy" after a "return"?

    这是 不是 Kotlin 中的特殊语法,带有特定的单词“async”或“lazy”。所以它并不是真正的“ return 关键字的后缀”。 空格后 , return 后面的始终是您要返回的值:
  • return 42返回值 42
  • return async返回表达式 async 的值(这可能是之前代码中声明过的一个变量)
  • return async { 42 }返回表达式 async { 42 } 的值.

  • 表达式 async { 42 }的含义这里与 return无关在自身。您可以看到分配给变量的相同表达式,例如: val deferred = async { 42 } . async只是 kotlinx.coroutines 库中的一个库函数(顺便说一下,这只是我的猜测,也许你看到的代码声明了这个名字的变量/函数,但如果没有更多的上下文就很难说清楚)。看看 doc of the async function here如果你有兴趣。
    1. What does the "@" symbol mean here?
    return关键字默认从用 fun 声明的最接近的封闭函数返回。关键词。 Lambda 不算数,因为它们没有用 fun 声明.
    因此, return - 来自 lambda 内部的 -ing 默认情况下(没有 @ )从封闭函数返回,而不仅仅是“本地”lambda(与Java中发生的情况相反)。这就是我们称它们为非本地返回的原因。
    使用带有标签的合格返回 ( return@label ) 允许更改此默认行为并明确指定要返回的内容。
    请参阅关于 return at labels 的文档,它包含许多示例。
    你给出的具体例子:
    return@async
    return@lazy
    return@withContext
    需要更多的上下文来理解它们。但我假设您已经看到它们在参数为 async 的 lambda 中使用。/ lazy/ withContext函数调用。 @ 后面是什么这里称为隐式标签,它告诉编译器这个 return应该从这个 lambda 返回而不是从最近的封闭 fun 返回.
    其他注意事项
    请注意 @此处的符号不是您在其他地方看到的注释,例如 @JvmDefault@OptIn(...) ,它是一个标签引用。
    请注意,标签和返回值都可以组合: return@myLabel 42从标签 myLabel 限定的函数中返回值 42 .

    关于Kotlin 关于 @ 符号和返回后缀的澄清,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66839710/

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