我对下一个语法的含义用法感到困惑。
在“返回”之后放置后缀“async”和“lazy”究竟有什么作用?
return async
return lazy
Run Code Online (Sandbox Code Playgroud)
这里的“@”符号是什么意思?
return@async
return@lazy
return@withContext
Run Code Online (Sandbox Code Playgroud)
关于“@”符号,它在 Kotlin 中有特殊的命名吗?所以我可以更好地在文档中找到所有使用它的方法?
添加@ 和不使用它有什么区别?所以:
"return async" vs "return@async"
Run Code Online (Sandbox Code Playgroud)
- 在“return”之后放置后缀“async”和“lazy”到底有什么作用?
这并不是Kotlin 中带有特定单词“异步”或“惰性”的特殊语法。所以它并不是真正的“关键字后缀return”。在空格之后,return后面的始终是您想要返回的值:
return 42返回值 42return async返回表达式的值async(可能是之前在代码中声明的变量)return async { 42 }返回表达式的值async { 42 }。这里表达的意思与本身async { 42 }无关。return您可以看到分配给变量的相同表达式,例如:val deferred = async { 42 }。async只是 kotlinx.coroutines 库中的一个库函数(顺便说一句,这只是我的猜测,也许您看到的代码声明了该名称的变量/函数,但如果没有更多上下文,很难判断)。如果您有兴趣,请查看此处该函数的文档。async
- 这里的“@”符号是什么意思?
默认情况下,关键字return从使用该fun关键字声明的最接近的封闭函数返回。Lambda 不算数,因为它们不是用 声明的fun。
因此,return默认情况下(不带 ),从 lambda 内部返回的 -ing 将从@封闭函数返回,而不仅仅是“本地”lambda(与 Java 中发生的情况相反)。这就是为什么我们称它们为非本地返回。
使用带有标签( ) 的限定返回值可以更改此默认行为并明确指定要从中返回的内容。请参阅有关return at labels的文档,它包含许多示例。return@label
您给出的具体例子:
return@async
return@lazy
return@withContext
Run Code Online (Sandbox Code Playgroud)
需要更多背景知识才能理解它们。但我假设您已经看到它们在作为async函数lazy调用参数的 lambda 内部使用withContext。这里后面的内容@称为隐式标签,它告诉编译器return应该从该 lambda 返回而不是从最接近的封闭返回fun。
请注意,@此处的符号不是像您在其他地方看到的注释@JvmDefault(如或 )@OptIn(...),而是标签引用。
请注意,标签和返回值都可以组合:return@myLabel 42从由标签限定的函数返回值 42 myLabel。
| 归档时间: |
|
| 查看次数: |
79 次 |
| 最近记录: |