lambda - 在构造函数中传递的 lambda 函数中访问类上下文
问题描述
我创建了一个接受输入参数的类,它是一个 lambda 函数:
class MyClass(var onClick: () -> Unit) {
private val title = SomeComponent()
init {
// register some listeners that finally invokes `onClick`
// for simplicity, let's assume:
title.addKeyListener(object : KeyListener {
override fun keyPressed(e: KeyEvent?) {
onClick()
}
})
}
}
这MyClass
是使用提供的初始化onClick
:
val instance = MyClass(
onClick = {
// some logic
}
)
是否可以从onClick
函数内部访问类上下文?
解决方案
当然,您可以onClick
MyClass
作为接收者提供。
class MyClass(var onClick: MyClass.() -> Unit) { //...
init {
//...
onClick()
//...
}
}
fun main() {
MyClass {
// "this" is the instance of MyClass here
}
}
在该init
块中,您可以调用三个选项onClick()
:
this.onClick()
onClick(this)
onClick() // is invoked on this, but this is omitted
我会选择最后一个。
推荐阅读
- php - PHP 在 JSON 上抛出 JSON_ERROR_STATE_MISMATCH,检查每个在线验证器是否有效
- sql - 使用 NOT 关键字时如何使用内连接
- java - 使用来自 Raspberry Pi Zero W 的自定义数据广播 BLE 广告,将其用作外围设备
- elixir - 使用动态运算符创建 Ecto 查询
- wagtail - 用于获取子页面的 Wagtail Admin api 调用在资源管理器中返回 0
- gams-math - 在 MIP 海运库存路由建模期间,无法在决策变量之间分配条件
- db2 - 这在 DB2 中意味着什么:DECLARE CONTINUE HANDLER FOR NOT FOUND..?
- mysql - 是否有任何替代方法可以将 MySQL 服务器连接到 Azure 数据工厂 for MAC
- c++ - 如何在 Visual Studio 代码中调试 bazel C++ 谷歌测试
- java - 创建一个简单的 Java 更改计算器?