Kotlin Groovy Style Builder
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的更多相关文章
- Groovy 学习手册(1)
1. 需要安装的软件 Java / Groovy 对应 Java 和 Groovy,你需要安装以下软件: Java JDK,例如 JDK 8 IDE,例如 Eclipse,NetBeans 8 Gro ...
- Kotlin Android项目静态检查工具的使用
Kotlin Android项目静态检查工具的使用 Kotlin Android项目可用的静态检查工具: Android官方的Lint, 第三方的ktlint和detekt. 静态检查工具 静态检查工 ...
- 高效快捷解决一个TextView显示多种字体的控件SpannableTextView
这个控件本人强烈推荐,它会使得布局非常的简单且高效: 下面这个布局如果是你,你会用多少层?多少控件生成? 告诉你吧,一个SpannableTextView控件就搞定了! 它把TextView和Span ...
- [AFUI]App Framework
---------------------------------------------------------------------------------------------------- ...
- WPF第三方控件Telerik
帮助文档:http://www.telerik.com/help/wpf/gridview-selection-via-checkbox.html Telerik专注于微软.Net平台的表示层与内容管 ...
- 只需两步!Eclipse+Maven快速构建第一个Spring Boot项目
随着使用Spring进行开发的个人和企业越来越多,Spring从一个单一简介的框架变成了一个大而全的开源软件,最直观的变化就是Spring需要引入的配置也越来越多.配置繁琐,容易出错,让人无比头疼, ...
- Spring系列(零) Spring Framework 文档中文翻译
Spring 框架文档(核心篇1和2) Version 5.1.3.RELEASE 最新的, 更新的笔记, 支持的版本和其他主题,独立的发布版本等, 是在Github Wiki 项目维护的. 总览 历 ...
- java之项目构建工具Gradle
介绍 Java 作为一门世界级主流编程语言,有一款高效易用的项目管理工具是 java 开发者共同追求的心愿和目标.显示 2000 年的 Ant,后有 2004 年的 Maven 两个工具的诞生,都在 ...
- jvm虚拟机---执行引擎子系统
Java虚拟机只与Class文件相关联,它规定了Class文件应该具有的格式,而不论该文件是由什么语言编写并编译而来.所以,任何语言只要能够最终编译成符合Java虚拟机要求的Class文件,就可以运行 ...
随机推荐
- Linux术语全称
bin = BINaries (binary) /dev = devices /etc = ETCetera etcetera附加的人, 附加物, 以及其它, 等等 /lib = LIBrary /p ...
- 3.mvc core 文件目录详细的解释
wwwroot 放js css image的文件夹,静态文件. favicon.ico 网站图标.上传文件的话最好在里面新建一个Upload的文件夹进行管理 Controllers 控制器, View ...
- quantile normalization原理
对于芯片或者其它表达数据来说,最常见的莫过于quantile normalization啦. 那么它到底对我们的表达数据做了什么呢?首先要么要清楚一个概念,表达矩阵的每一列都是一个样本,每一行都是一个 ...
- nginx基本配置和参数说明
#运行用户user nobody;#启动进程,通常设置成和cpu的数量相等worker_processes 1; #全局错误日志及PID文件#error_log logs/error.log;#err ...
- 数据源增量处理(Delta Proess)三大属性:Recod Mode、Delta Type、Serialization
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
- Cocos2d-x 核心概念 - 导演(Director)
导演类(Director) 用于管理场景对象,采用的是单例模式(单例模式能保存一致的配置信息,方便管理场景对象) 获得导演实例的语句如下 local director = cc.Director:ge ...
- html5画布基础
canvas 元素用于在网页上绘制图形. 什么是canvas? HTML5 的 canvas 元素使用 JavaScript 在网页上绘制图像. 画布是一个矩形区域,您可以控制其每一像素. canva ...
- 【转】部分电脑安装升级 ubuntu 12.04 后无法挂起问题的解决(挂起无法唤醒同样有效)
原文地址:http://blog.csdn.net/longerzone/article/details/7860232 我的Ubuntu12.04是安装的windows桌面安装版(使用wubi安装) ...
- C# 类型转换
int 转换 string 转换有两种: 一种是隐式, ; string b = a.ToString(); 一种是显示. sting b=Convert.ToString();
- MFC编程入门之二十(常用控件:静态文本框)
上一节讲了颜色对话框之后,关于对话框的使用和各种通用对话框的介绍就到此为止了.从本节开始将讲解各种常用控件的用法.常用控件主要包括:静态文本框.编辑框.单选按钮.复选框.分组框.列表框.组合框.图片控 ...