[Kotlin Cookbook] 如何合并,修改scope(作用域)
在使用作用域函数的时候,常常需要子函数不仅拥有父函数的scope(作用域),而且拥有自定义的额外scope
这可以用接口的继承和委托实现来完成
interface Scope1 {
fun scopeFun1()
}
interface MergedScope :Scope1{
fun scopeFun2() // 额外
}
fun Scope1.fun1() {
var t = 0
object :MergedScope, Scope1 by this { // 委托this实现Scope1
override fun scopeFun2() { // 额外的fun2
println("t = $t")
}
}.fun2()
}
fun MergedScope.fun2() {
scopeFun1()
scopeFun2()
}
在没有作用域函数的时候,可以传参实现相似的功能
fun f1() {
var t = 0;
f2({ (x) -> t=x })
}
fun f2(setT :(Int)->Unit) {
setT(2)
}