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>

 

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 2016-03-16 17:35  scala  阅读(636)  评论(0编辑  收藏  举报