Kotlin Builder 与构造函数
Kotlin Builder vs Constructor
我是 Kotlin 的新手,我遇到过这两种表示形式:
Car(name = "CarName")
和
car {
name = "CarName"
}
关于何时应该使用哪一个,是否有任何指导方针? The docs这个好像不太清楚
第二个片段是一个示例,说明如何为您的域构建 DSL。对于像这样的简单情况,创建 DSL 有点矫枉过正,但是当您的对象变大时,设计 DSL 可能会更干净。
事实上,使用 DSL 风格来创建简单的实例甚至可能令人困惑。
例如,the documentation on DSLs显示如下代码:
fun result(args: Array<String>) =
html {
head {
title {+"XML encoding with Kotlin"}
}
body {
h1 {+"XML encoding with Kotlin"}
p {+"this format can be used as an alternative markup to XML"}
// an element with attributes and text content
a(href = "http://kotlinlang.org") {+"Kotlin"}
// mixed content
p {
+"This is some"
b {+"mixed"}
+"text. For more see the"
a(href = "http://kotlinlang.org") {+"Kotlin"}
+"project"
}
p {+"some text"}
// content generated by
p {
for (arg in args)
+arg
}
}
}
这是您何时可以使用 DSL 的一个很好的例子:该语法使您可以使用清晰的结构来创建模型。 Anko 为另一个提供了一个 DSL 来定义 UI。
我是 Kotlin 的新手,我遇到过这两种表示形式:
Car(name = "CarName")
和
car {
name = "CarName"
}
关于何时应该使用哪一个,是否有任何指导方针? The docs这个好像不太清楚
第二个片段是一个示例,说明如何为您的域构建 DSL。对于像这样的简单情况,创建 DSL 有点矫枉过正,但是当您的对象变大时,设计 DSL 可能会更干净。
事实上,使用 DSL 风格来创建简单的实例甚至可能令人困惑。
例如,the documentation on DSLs显示如下代码:
fun result(args: Array<String>) =
html {
head {
title {+"XML encoding with Kotlin"}
}
body {
h1 {+"XML encoding with Kotlin"}
p {+"this format can be used as an alternative markup to XML"}
// an element with attributes and text content
a(href = "http://kotlinlang.org") {+"Kotlin"}
// mixed content
p {
+"This is some"
b {+"mixed"}
+"text. For more see the"
a(href = "http://kotlinlang.org") {+"Kotlin"}
+"project"
}
p {+"some text"}
// content generated by
p {
for (arg in args)
+arg
}
}
}
这是您何时可以使用 DSL 的一个很好的例子:该语法使您可以使用清晰的结构来创建模型。 Anko 为另一个提供了一个 DSL 来定义 UI。