如何使用 Kotlin 的调用运算符获取对象实例化的接收者
How to use Kotlin's invoke operator to get a receiver on object instantiation
class Family() {
fun addMember(name: String) {}
inline operator fun invoke(body: Family.() -> Unit) {
body()
}
}
使用 invoke 运算符函数后,我可以这样做:
val family = Family().invoke { this:
addMember("Android")
}
我见过代码结构,其中声明只是通过这样做。
val family = Family { this:
addMember("Android")
}
在当前情况下,可以在实例上调用调用,即
val family = Family()
family {
addMember(...)
}
如果我理解正确,您想创建 Family 的新实例并将块应用到对象中,您可以通过将函数放在同伴下来实现。
class Family {
fun addMember(name: String) {}
companion object {
inline operator fun invoke(body: Family.() -> Unit): Family {
return Family().apply(body)
}
}
}
现在:
val family = Family {
addMember(...)
}
class Family() {
fun addMember(name: String) {}
inline operator fun invoke(body: Family.() -> Unit) {
body()
}
}
使用 invoke 运算符函数后,我可以这样做:
val family = Family().invoke { this:
addMember("Android")
}
我见过代码结构,其中声明只是通过这样做。
val family = Family { this:
addMember("Android")
}
在当前情况下,可以在实例上调用调用,即
val family = Family()
family {
addMember(...)
}
如果我理解正确,您想创建 Family 的新实例并将块应用到对象中,您可以通过将函数放在同伴下来实现。
class Family {
fun addMember(name: String) {}
companion object {
inline operator fun invoke(body: Family.() -> Unit): Family {
return Family().apply(body)
}
}
}
现在:
val family = Family {
addMember(...)
}