在Kotlin DSL示例中,他们使用plus
符号来实现原始内容插入:
html {
head {
title {+"XML encoding with Kotlin"}
}
// ...
}
是否可以在接收器中定义“无名”功能以便能够编写
html {
head {
title {"XML encoding with Kotlin"}
}
// ...
}
在未来的Kotlin版本中是否有计划这样做?
Kotlin以外的语言中是否有这样的东西?
答案 0 :(得分:5)
我可以想到两个问题的解决方案:
使接收器的lambda返回String
:
fun title(init: Title.() -> String) {
val t = Title().apply {
children.add(TextElement(init()))
}
children.add(t)
}
您现在可以按照OP中的建议调用title
。实际上这似乎是在这种特殊情况下的开销,我建议如下。
创建另一个直接带有title
的{{1}}方法:
String
像这样使用:
class Head : TagWithText("head") {
fun title(init: Title.() -> Unit) = initTag(Title(), init)
fun title(text: String) {
val t = Title().apply {
children.add(TextElement(text))
}
children.add(t)
}
}