是否有可能隐藏lambda闭包的变量?

Ale*_*lov 5 lambda type-safety builder-pattern kotlin

我正试图在Kotlin中创建一个类型安全的groovy式构建器,就像这里描述的那样.问题是嵌套lambda中lambda接收器的可见性.这是一个简单的例子.

html {
    head(id = "head1")
    body() {
        head(id = "head2")
    }
}
Run Code Online (Sandbox Code Playgroud)

嵌套lambda的接收者是没有'head'方法的Body.然而,这段代码编译并打印成:

<html>
    <head id="head1"></head>
    <head id="head2"></head>
    <body></body>
</html>
Run Code Online (Sandbox Code Playgroud)

这是预期的但有没有办法在内部头部获得编译错误?

yol*_*ole 4

从 Kotlin 1.0 开始,这是不可能的。有一个针对此功能的开放功能请求。