class TreeNode(val name: String? = null) {//构造函数
private val children = mutableListOf<TreeNode>()//可变列表
fun node(name: String? = null, initialize: (TreeNode.() -> Unit)? = null) {//一个参数为String,一个参数为lambda,均由默认值
val child = TreeNode(name)
children.add(child)
if (initialize != null) {
child.initialize()
}
}
fun count(): Int {//递归求节点数
var size = 1
children.forEach { size += it.count() }
return size
}
}
fun tree(initialize: (TreeNode.() -> Unit)? = null): TreeNode {//高阶函数
val root = TreeNode()
if (initialize != null) {
root.initialize()
}
return root
}
fun testTreeNode() {
val treeNode = tree {//DSL调用
node {
node("1") {
node("11")
}
node("1") {
node("12")
}
}
node {
node("2")
node("2") {
node("21")
}
}
}
println("This tree has $treeNode nodes")
}
基于Lambda的DSL
最新推荐文章于 2023-02-25 21:12:50 发布