随笔 - 56  文章 - 0 评论 - 0 阅读 - 50739

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
fun main(args:Array<String>):Unit{
 
    val x = a{
        aa{
            +"01.01"
            +"01.02"
        }
        aa{
            +"02.01"
            +"02.02"
        }
    }
    print(x)
}
 
fun a(p:A.()->Unit):A {
 
    val a = A()
    a.p()
    return a;
}
 
class A {
 
    val children=arrayListOf<AA>()
 
    fun aa(p:AA.()->Unit){
 
        val aa = AA();
        aa.p();
        children.add(aa);
    }
 
    override fun toString(): String {
        val builder = StringBuilder("<a>")
        children.forEach { builder.append(it.toString()) }
        builder.append("\r\n</a>")
        return builder.toString();
    }
 
}
 
class AA {
    val children=arrayListOf<String>()
 
    operator fun String.unaryPlus() {
        children.add("\r\n\t\t<text>${this}</text>")
    }
 
    override fun toString(): String {
        val builder = StringBuilder("\r\n\t<aa>")
        children.forEach { builder.append(it.toString()) }
        builder.append("\r\n\t</aa>")
        return builder.toString();
    }
}

 执行结果

复制代码
<a>
    <aa>
        <text>01.01</text>
        <text>01.02</text>
    </aa>
    <aa>
        <text>02.01</text>
        <text>02.02</text>
    </aa>
</a>
复制代码

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
import java.util.*
 
import List.Companion.list
import Map.Companion.map
 
 
fun main(args: Array<String>): Unit {
 
    val x = list {
        values("a", "b", "c")
        list {
            values("a", "b", "c")
            map {
                values("name" to "Fred")
            }
        }
        map {
            values(
                    "name" to "Fred",
                    "age" to "28",
                    "fav" to list {
                        values("java", "c++", "kotlin")
                    }
            )
        }
    }
 
    val y = map {
        values("languages" to list {
            values("java", "c++", "perl")
            values("scala","kotlin","ruby")
        })
    }
 
    println(x)
    println(y)
}
 
 
class List : ArrayList<Any>() {
 
    companion object {
 
        fun list(p: List.() -> Unit): List {
            val l = List()
            l.p()
            return l
        }
    }
 
    fun values(vararg x: Any) {
        this.addAll(x)
    }
 
    fun list(p: List.() -> Unit) {
        val l = List()
        l.p()
        this.add(l as Any)
    }
 
    fun map(p: Map.() -> Unit) {
        val m = Map()
        m.p()
        this.add(m as Any)
    }
 
}
 
class Map : HashMap<String, Any>() {
 
    companion object {
 
        fun map(p: Map.() -> Unit): Map {
            val m = Map()
            m.p()
            return m
        }
    }
 
    fun values(vararg x: Pair<String, Any>) {
        this.putAll(x)
    }
 
    fun list(p: List.() -> Unit): List {
        val l = List()
        l.p()
        return l;
    }
 
    fun map(p: Map.() -> Unit): Map {
        val m = Map()
        m.p()
        return m
 
    }
 
}

执行结果

[a, b, c, [a, b, c, {name=Fred}], {name=Fred, fav=[java, c++, kotlin], age=28}]
{languages=[java, c++, perl, scala, kotlin, ruby]}

  

 

  

posted on   scala  阅读(638)  评论(0)    收藏  举报
点击右上角即可分享
微信分享提示