【发布时间】:2016-05-02 22:47:50
【问题描述】:
有没有办法限制 DSL 中的扩展方法?
假设我有一个这样的类结构:
class Outer {
fun middle(op: Middle.() -> Unit): Middle {
val middle = Middle()
middle.op()
return middle
}
}
class Middle {
fun inner(op: Inner.() -> Unit): Inner {
val inner = Inner()
inner.op()
return inner
}
}
class Inner
fun outer(op: Outer.() -> Unit): Outer {
val outer = Outer()
outer.op()
return outer
}
然后我可以像这样创建一个调用:
outer {
middle {
inner {
middle { } // Here is the problem
}
}
}
我的问题是标记的middle { } 调用令人困惑,因为它在看起来像是添加到Inner 时将Middle 添加到Outer。
有没有办法不允许middle { } 调用?
【问题讨论】:
-
这目前是不可能的,但根据youtrack.jetbrains.com/issue/KT-11551计划在 1.1 中实现