kotlin - kotlin 中的“直接来自函数体”是什么意思?
问题描述
Kotlin 关于内联函数的文档说
请注意,某些内联函数可能不直接从函数体调用作为参数传递给它们的 lambda,而是从另一个执行上下文(例如本地对象或嵌套函数)调用。在这种情况下,lambdas 中也不允许非本地控制流。为了表明这一点,需要用 crossinline 修饰符标记 lambda 参数:
“直接来自函数体”是什么意思?内联函数如何调用 lambda?你能给我一些具体的例子吗?
该文档提供了一个从另一个执行上下文调用 lambda 的内联函数示例:
inline fun f(crossinline body: () -> Unit) {
val f = object: Runnable {
override fun run() = body()
}
// ...
}
但是,什么是“另一个执行上下文”?内联函数如何从另一个执行上下文中调用 lambda?
非常感谢。
解决方案
“直接来自函数体”意味着 lambda 将仅作为执行内联函数的一部分执行。如果 lambda 存储在某个属性中或传递到其他地方,则认为它是间接执行的。
请注意,在示例中,lambda 被传递给Runnable
对象,它不是由f
函数直接执行的。
推荐阅读
- optimization - 使用 GNU 中的编译和链接标志减少 fortran 程序的运行时间
- arrays - Node JS Mongodb 插入命令
- python - 在 Python 中的字典子集中爆炸键和值
- php - 如何访问这个数组内部元素?
- python - pandas - 带倒计时的批次分配
- php - 致命错误:require_once():无法打开所需的 header.php
- python - opencv没有打开现有的png图像
- java - Jiray REST API - 查询平面 JSON 结构中所有字段的问题
- elixir - 依赖项是否可以在 elixir 中创建数据库表?
- tabulator - 制表符。如何启用和禁用 js 编辑