DSL中的隐式接收器范围控制
@DslMarker注解允许限制外层接受器的范围。考虑以下例子:
table {
tr {
td { +"Text" }
}
}
在Kotlin 1.0中,被传递给td的lambda表达式可以访问三个隐式的接收器:传递给table的接收器、传递给tr和td的接收器。这样允许你在上下文环境无相关的情况下调用相关方法。比如在td中调用tr,因此添加一个tr标签到td。
在Kotlin 1.1中,你可以做相关限制,以至于只有定义隐式接收器的td的相关方法才可以被执行。使用@DslMarker美剧并且将其应用到标签类的基类中。