`
JohnnyJian
  • 浏览: 104381 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论
文章列表
之前Evan在http://www.chinagroovy.org/forum/index.php?topic=291.0中问了关于如何调用一个外部的Groovy脚本中的闭包的问题,实际上这并不复杂,要比Java调用Groovy的方法简单。 譬如我们有这样的脚本: // com/test/SomeScript.groovy package com.test println a b = a * 2 c = { -> println a * 3 } 我们可以这样子调用这个脚本(不需要把SomeScript.groovy编译为class文件,当然编译也是可以的): // ...
假设我们有这样的代码: class Test { def fun1() { println 'a' } def fun2() { println 'b' } def fun3() { println 'c' } } def test = new Test() test.fun1() test.fun2() test.fun3() 我们可以通过Object上的with方法省去test对象的限定: test.with { it.fun1() it.fun2() it.fun3() } // 或者连it也省去 te ...
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的循环可能会影响语义 ...
今天写了个读取类的函数的签名的脚本,供学习之用,其实最主要是想看看Groovy都给类添加了些什么函数。 代码就二十多行,从中又可以体现出Groovy代码之精炼   PrintClass.groovy: if (args) { def className = args[0] def theClass = Class.forName(className) def theMetaClass = theClass.metaClass def printClass = { property -> println "The $prop ...
在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 val def asTy ...
利用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 ...
Global site tag (gtag.js) - Google Analytics