Groovy学习笔记
johnny_jian
这个作者很懒,什么都没留下…
展开
-
Groovy学习笔记——使用with方法减少代码
假设我们有这样的代码:[code="java"]class Test { def fun1() { println 'a' } def fun2() { println 'b' } def fun3() { println 'c' }}def test = new Test()test.fun1()test.fun2()test.fun3(...2008-08-24 10:44:47 · 646 阅读 · 0 评论 -
Groovy学习笔记——用inject方法构造Map
假设我们有两个List,分别是a和b,a和b的长度相同,现在我们想把a的每个元素作为key,b中对应的元素作为value,构造一个Map,应该怎么写呢?最直接的想法,先建立一个空的Map,然后往里面添加key-value对,代码如下(运用了我在[url]http://johnnyjian.iteye.com/blog/271554[/url]中提到的同时迭代多个List的技巧):[co...2009-08-02 11:46:45 · 266 阅读 · 0 评论 -
Groovy学习笔记——Map的key
请看如下代码:[code="java"]def a = 'b'def m = [a:a]println m // 输出[a:b][/code]输出的是[a:b]而不是[b:b],这是因为Groovy把Map的key都当作字符串处理了,即使没有加上单引号或者双引号。所以这里Map的key“a”并不是看作变量a,而是字符串"a"。要让这里的a被看作变量,需要加上圆括号或者使用GSt...2008-05-24 19:52:24 · 1352 阅读 · 0 评论 -
Groovy学习笔记——实现简单的C++输出风格
代码如下:[code="java"]def out = System.out // 也可以用import static System.out as outdef endl = '\n'out2008-05-15 19:30:43 · 186 阅读 · 0 评论 -
Groovy学习笔记——times方法
在写程序的时候,可能需要用到0到n-1的循环,一般的写法是:[code="java"]for (i = 0; i < 5; ++i) { println i}[/code]或者更Groovy的写法:[code="java"]for (i in 0.. println i}[/code]但是用times方法来做0到n-1的循环可能会影响语义,所以最好还是根...2008-05-14 08:38:45 · 825 阅读 · 0 评论 -
Groovy学习笔记——同时迭代多个List
假设我们有这样两个List:[code="java"]def list1 = [1, 2, 3]def list2 = [4, 5, 6][/code]我们需要检查是否第二个List的每个元素都比第一个List的对应元素大,最直接的想法是,迭代第一个List,然后通过下标访问第二个List:[code="java"]def result = truelist1.eachWith...2008-11-20 12:30:05 · 673 阅读 · 0 评论 -
Groovy学习笔记——闭包的递归调用
如果一个闭包被赋值给一个对象的属性(在脚本中,给一个没有定义过的变量赋值,实际上就是给这个脚本对象添加了一个属性),那么当需要对这个闭包进行递归调用的时候,可以直接使用这个属性的名字进行调用:[code="java"]// 递归求n!factorialProperty = { n -> if (n == 0) return 1 n * factorialProperty...2008-10-30 13:43:59 · 680 阅读 · 0 评论 -
Groovy学习笔记——改变Closure中方法的解析顺序
在Closure中,方法的默认解析顺序是,先查看owner是否包含这个方法,如果没有的话再查看delegate是否有这个方法。实际的过程要比这个复杂,因为涉及到嵌套的Closure的情况,在这种情况下,还要考虑外围的Closure的delegate。在这里就不讨论嵌套Closure的情况了,有兴趣的可以查看ClosureMetaClass.invokeMethod方法的源代码。我们可以通过Cl...2008-10-27 11:20:49 · 430 阅读 · 0 评论 -
Groovy学习笔记——在Groovy中调用Groovy脚本
之前Evan在[url]http://www.chinagroovy.org/forum/index.php?topic=291.0[/url]中问了关于如何调用一个外部的Groovy脚本中的闭包的问题,实际上这并不复杂,要比Java调用Groovy的方法简单。譬如我们有这样的脚本:[code="java"]// com/test/SomeScript.groovypackage ...2008-09-02 20:08:50 · 776 阅读 · 0 评论 -
Groovy学习笔记——读取类的函数签名的脚本
今天写了个读取类的函数的签名的脚本,供学习之用,其实最主要是想看看Groovy都给类添加了些什么函数。代码就二十多行,从中又可以体现出Groovy代码之精炼 PrintClass.groovy:if (args) { def className = args[0] def theClass = Class.forName(className) def theM...2008-02-04 17:45:32 · 288 阅读 · 0 评论 -
Groovy学习笔记——实现Ruby的case .. when表达式
今天看到有人在Groovy的邮件列表上问Groovy能不能支持Ruby的case ... when表达式:[code="ruby"]car = "Patriot"manufacturer = case car when "Focus": "Ford" when "Navigator": "Lincoln" when "Camry": &qu2009-03-12 10:54:08 · 1058 阅读 · 0 评论 -
Groovy学习笔记——as操作符
在Groovy中,as操作符有两种用途:定义导入别名和类型转换。 1. 定义导入别名只要在import一个类或方法的时候使用as操作符,就可以对其进行重命名:import java.lang.Math as M // 定义类的别名assert M.log10(100) == 2import static M.log10 as log // 定义方法的别名assert log...2008-01-31 19:31:15 · 1678 阅读 · 0 评论 -
Groovy学习笔记——利用Groovy的动态特性删除属性
利用Groovy的动态特性,不但可以给类添加属性(http://www.blogjava.net/BlueSUN/archive/2007/07/15/130318.html),还可以删除类的属性。代码如下:class A { String attToRemove int otherAtt}def a = new A()a.attToRemove = 1pr...2008-01-12 17:28:13 · 827 阅读 · 0 评论 -
Groovy学习笔记——实现Python风格的String format
在Python中提供了String format的操作符:[code="python"]print '%s: %d' % ('one', 1)[/code]在Java中则是通过String.format()方法实现:[code="java"]System.out.println(String.format("%s: %d", "one", 1));[/code]而在Groovy中,...原创 2013-03-11 01:27:07 · 997 阅读 · 0 评论