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]}

  

  

Kotlin Groovy Style Builder的更多相关文章

  1. Groovy 学习手册(1)

    1. 需要安装的软件 Java / Groovy 对应 Java 和 Groovy,你需要安装以下软件: Java JDK,例如 JDK 8 IDE,例如 Eclipse,NetBeans 8 Gro ...

  2. Kotlin Android项目静态检查工具的使用

    Kotlin Android项目静态检查工具的使用 Kotlin Android项目可用的静态检查工具: Android官方的Lint, 第三方的ktlint和detekt. 静态检查工具 静态检查工 ...

  3. 高效快捷解决一个TextView显示多种字体的控件SpannableTextView

    这个控件本人强烈推荐,它会使得布局非常的简单且高效: 下面这个布局如果是你,你会用多少层?多少控件生成? 告诉你吧,一个SpannableTextView控件就搞定了! 它把TextView和Span ...

  4. [AFUI]App Framework

    ---------------------------------------------------------------------------------------------------- ...

  5. WPF第三方控件Telerik

    帮助文档:http://www.telerik.com/help/wpf/gridview-selection-via-checkbox.html Telerik专注于微软.Net平台的表示层与内容管 ...

  6. 只需两步!Eclipse+Maven快速构建第一个Spring Boot项目

     随着使用Spring进行开发的个人和企业越来越多,Spring从一个单一简介的框架变成了一个大而全的开源软件,最直观的变化就是Spring需要引入的配置也越来越多.配置繁琐,容易出错,让人无比头疼, ...

  7. Spring系列(零) Spring Framework 文档中文翻译

    Spring 框架文档(核心篇1和2) Version 5.1.3.RELEASE 最新的, 更新的笔记, 支持的版本和其他主题,独立的发布版本等, 是在Github Wiki 项目维护的. 总览 历 ...

  8. java之项目构建工具Gradle

    介绍 Java 作为一门世界级主流编程语言,有一款高效易用的项目管理工具是 java 开发者共同追求的心愿和目标.显示 2000 年的 Ant,后有 2004 年的 Maven 两个工具的诞生,都在 ...

  9. jvm虚拟机---执行引擎子系统

    Java虚拟机只与Class文件相关联,它规定了Class文件应该具有的格式,而不论该文件是由什么语言编写并编译而来.所以,任何语言只要能够最终编译成符合Java虚拟机要求的Class文件,就可以运行 ...

随机推荐

  1. Linux术语全称

    bin = BINaries (binary) /dev = devices /etc = ETCetera etcetera附加的人, 附加物, 以及其它, 等等 /lib = LIBrary /p ...

  2. 3.mvc core 文件目录详细的解释

    wwwroot 放js css image的文件夹,静态文件. favicon.ico 网站图标.上传文件的话最好在里面新建一个Upload的文件夹进行管理 Controllers 控制器, View ...

  3. quantile normalization原理

    对于芯片或者其它表达数据来说,最常见的莫过于quantile normalization啦. 那么它到底对我们的表达数据做了什么呢?首先要么要清楚一个概念,表达矩阵的每一列都是一个样本,每一行都是一个 ...

  4. nginx基本配置和参数说明

    #运行用户user nobody;#启动进程,通常设置成和cpu的数量相等worker_processes 1; #全局错误日志及PID文件#error_log logs/error.log;#err ...

  5. 数据源增量处理(Delta Proess)三大属性:Recod Mode、Delta Type、Serialization

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  6. Cocos2d-x 核心概念 - 导演(Director)

    导演类(Director) 用于管理场景对象,采用的是单例模式(单例模式能保存一致的配置信息,方便管理场景对象) 获得导演实例的语句如下 local director = cc.Director:ge ...

  7. html5画布基础

    canvas 元素用于在网页上绘制图形. 什么是canvas? HTML5 的 canvas 元素使用 JavaScript 在网页上绘制图像. 画布是一个矩形区域,您可以控制其每一像素. canva ...

  8. 【转】部分电脑安装升级 ubuntu 12.04 后无法挂起问题的解决(挂起无法唤醒同样有效)

    原文地址:http://blog.csdn.net/longerzone/article/details/7860232 我的Ubuntu12.04是安装的windows桌面安装版(使用wubi安装) ...

  9. C# 类型转换

    int 转换 string 转换有两种: 一种是隐式, ; string b = a.ToString(); 一种是显示. sting b=Convert.ToString();

  10. MFC编程入门之二十(常用控件:静态文本框)

    上一节讲了颜色对话框之后,关于对话框的使用和各种通用对话框的介绍就到此为止了.从本节开始将讲解各种常用控件的用法.常用控件主要包括:静态文本框.编辑框.单选按钮.复选框.分组框.列表框.组合框.图片控 ...