如何在Kotlin中编写正确的HTML生成器
我正在学习Kotlin并阅读“ 类型安全建设者 ”部分
我跟着它的例子,编写了一些测试,然后我发现了一个我无法理解的问题。 问题是,看起来下面的代码是等价的:
-
嵌套的
head
html { head { title { +"First Title" } head { title { +"Second Title" } } } }
-
两个
head
在同一水平html { head { title { +"Second Title" } } head { title { +"First Title" } } }
这两个函数调用返回相同的结果。 测试结果
我认为正确的结果应该是“你看到的就是你得到的”。
如果仔细查看“com.example.html包的完整定义”,您将看到head
是HTML
一种方法。 这意味着head
只能在HTML
一个实例上被调用。 你期待它的工作方式,必须有一个head
班的Head
。
在你的第一个示例代码中, head
的第二个调用实际上是在外部html
实例接收器上调用的。 这意味着你有效的添加它创建的新元素到html
而不是它的立即封闭的head
。
换句话说,你的第一个代码示例等同于:
html { head { title { +"First Title" } this@html.head { title { +"Second Title" } } } }
注意this@html
,它正在限定哪个外部的接收者实例被用来调用head
。 还要注意, this@head
不会编译,因为正如我所说的, Head
类没有head
方法。