Getris是由本人发起的开源项目,它是一个用Groovy编写的俄罗斯方块游戏。 Getris的目的是向初学者演示Groovy的各种特征,这些特征包括: Closure Groovy Bean MetaClass Mixin (使用关键字'use') SwingBuilder MarkupBuilder (用于创建XML) XmlSlurper (用于解析XML) GAnt 单元测试工具, 如MockFor类 等等…… 项目地址:http://code.google.com/p/getris/ 欢迎大家加入!
请看如下代码: def a = 'b' def m = [a:a] println m // 输出[a:b] 输出的是[a:b]而不是[b:b],这是因为Groovy把Map的key都当作字符串处理了,即使没有加上单引号或者双引号。所以这里Map的key“a”并不是看作变量a,而是字符串"a"。 要让这里的a被看作变量,需要加上圆括号或者使用GString,如下所示: m = [(a):'a'] println m // 输出[b:a] m = ["$a":a] println m // 输出[b:b]
代码如下: def out = System.out // 也可以用import static System.out as out def endl = '\n' out << 'a' << ' ' << 'b' << endl out << 1 << endl out << 'abcdefg' << endl 这段代码可能没有什么实用价值,顶多只能展现一下Groovy的能力而已。
在写程序的时候,可能需要用到0到n-1的循环,一般的写法是: for (i = 0; i < 5; ++i) { println i } 或者更Groovy的写法: for (i in 0..<5) { println i } 但是其实可以使用int类型上的times方法: 5.times { println 'Yes' } 5.times { println it } // 输出“0 1 2 3 4”而不是“1 2 3 4 5” 5.times { i -> println i } 但是用times方法来做0到n-1的循环可能会影响语义,所 ...
一个身份证号码共18位,前17位表示地区、生日和流水号,而第18位是一个校验位。 下面是一段随机生成身份证号码的Groovy代码: def id = [] def rand = new Random() 17.times { id << rand.nextInt(10) } def s = 0; def w = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1] def v = [1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2] id.eachWithIndex { n, i -> s ...
今天写了个读取类的函数的签名的脚本,供学习之用,其实最主要是想看看Groovy都给类添加了些什么函数。代码就二十多行,从中又可以体现出Groovy代码之精炼 PrintClass.groovy:if (args) { def className = args[0] def theClass = Class.forName(className) def theMetaClass = theClass.metaClass def printClass = { property -> println "The $pr ...
2008-01-31

Groovy学习笔记——as操作符

关键字: groovy
在Groovy中,as操作符有两种用途:定义导入别名和类型转换。 1. 定义导入别名只要在import一个类或方法的时候使用as操作符,就可以对其进行重命名:import java.lang.Math as M // 定义类的别名 assert M.log10(100) == 2 import static M.log10 as log // 定义方法的别名 assert log(1000) == 3 2. 类型转换语法为“变量 as 类型”,在执行这个操作时,将调用左操作数的类的asType方法:class A { def va ...
利用Groovy的动态特性,不但可以给类添加属性(http://www.blogjava.net/BlueSUN/archive/2007/07/15/130318.html),还可以删除类的属性。代码如下:class A { String attToRemove int otherAtt } def a = new A() a.attToRemove = 1 println a.attToRemove A.metaClass.properties.remove(A.metaClass.properties.attToRemove) println a. ...
JohnnyJian
搜索本博客
最近加入圈子
存档
最新评论