Groovy快速入门 indesign快速入门

集合

(1)List(java.util.List)

list =[1, 2, 'hello', new java.util.Date()]

assertlist.size() == 4

assertlist.get(2) == 'hello'

注意:一切都是对象(数字会自动转换)

2Map(java.util.Map)

map =['name':'James', 'location':'London']

assertmap.size() == 2

assertmap.get('name') == 'James'

3)遍历集合

list =[1, 2, 3]

for (iin list) { println i }

2、闭包(Closures

?闭包类似Java的内类,区别是闭包只有单一的方法可以调用,但可以有任意的参数

closure= { param | println("hello ${param}") }

closure.call("world!")

closure = { greeting, name | println(greeting + name)}

closure.call("hello ","world!")

l闭包用“{}”括起,“|”前面是参数,后面是处理语句,使用call调用

这里我们使用了一个 Groovy-Beta3 闭包定义,只是为了让您能看懂老版本Groovy的一些例子。在新的GroovyJSR中对闭包的定义略有改动,因为| 字符同时也是 Java中的位操作符;GroovyJSR 建议使用 Nice(另外一种JRE语言)样式的-> 分隔符代替它。

?第一个例子演示了在字符串内使用参数的形式:${param}

?第二个例子演示了多参数形式:用“,”分隔参数

?如果只有一个参数,可以不写,而使用缺省的参数“it”,如下面的例子:

closure= { println "hello " + it }

closure.call("world!")

3each

?遍历集合,逐个传递给闭包

[1, 2,3].each { item | print "${item}-" }

?上面例子的输出结果是:1-2-3-

4collect

?遍历集合,逐个传递给闭包,处理后的结果返回给对应的项

value =[1, 2, 3].collect { it * 2 }

assertvalue == [2, 4, 6]

5find

?根据闭包断言,返回集合中找到的第一个项目

value =[1, 2, 3].find { it > 1 }

assertvalue == 2

6findAll

?根据闭包断言,返回集合中所有找到的项目

value =[1, 2, 3].findAll { it > 1 }

assertvalue == [2, 3]

7inject

?遍历集合,第一次将传递的值和集合项目传给闭包,将处理结果作为传递的值,和下一个集合项目传给闭包,依此类推

value =[1, 2, 3].inject('counting: ') { str, item | str + item}

assertvalue == "counting: 123"

value = [1, 2, 3].inject(0) { count, item | count + item}

assertvalue == 6

8every

?如果集合中所有项目都匹配闭包断言,就返回true,否则返回false

value =[1, 2, 3].every { it < 5 }

assertvalue

value =[1, 2, 3].every { item | item < 3}

assert !value

9any

?如果集合中任何项目匹配闭包断言,就返回true,否则返回false

value =[1, 2, 3].any { it > 2 }

assertvalue

value = [1, 2, 3].any { item | item > 3}

assertvalue == false

10min/max

?返回集合中的最小/最大项目(对象必须可比较)

value =[9, 4, 2, 10, 5].max()

assertvalue == 10

value =[9, 4, 2, 10, 5].min()

assertvalue == 2

value =['x', 'y', 'a', 'z'].min()

assertvalue == 'a'

11join

?连接集合中的值成一个字符串

value =[1, 2, 3].join('-')

assertvalue == '1-2-3'

12yield

?在Python和Ruby中通过yield语句创建“yield”风格的iterators,在Groovy同样有效,只是使用的是闭包

class Foo{
static void main(args) {
foo = new Foo()
for (x in foo.myGenerator) {
print("${x}-")
}
}
myGenerator(Closureyield){
yield.call("A")
yield.call("B")
yield.call("C")
}
}

?例子的输出结果是:A-B-C-

?Cloures原型可以省略,call和括号同样可选,这样更象Python/Ruby

class Foo {
myGenerator(yield){
yield "A"
yield "B"
yield "C"
}

static void main(args) {
foo = new Foo()
foo.myGenerator { println "Called with ${it}" }
}
}



Groovy全攻略--嵌入篇

Groovy被设计得非常轻量级,很容易迁入到任何Java应用系统。
你可以使用BSF将Groovy脚本嵌入任何Java代码中.但是Groovy提供了一个轻量级的紧密集成.下面是3种主要方法:

1.使用Shell调试脚本或表达式
在Groovy中你可以使用GroovyShell对Groovy脚本和表达式进行调试.GroovyShell允许你通过Binding对象传入或传出变量.

//从Java代码中调用Groovy语句
Bindingbinding=newBinding();
binding.setVariable("foo",newInteger(2));
GroovyShellshell=newGroovyShell(binding);

Objectvalue=shell.evaluate("println'HelloWorld!';x=123;returnfoo*10");
assertvalue.equals(newInteger(20));
assertbinding.getVariable("x").equals(newInteger(123));


2.在Java中动态调用运行Groovy代码
你可以使用GroovyClassLoader将Groovy的类动态地载入到Java程序中并直接使用或运行它.
下面是一个例子:

ClassLoaderparent=getClass().getClassLoader();
GroovyClassLoaderloader=newGroovyClassLoader(parent);
ClassgroovyClass=loader.parseClass(newFile("src/test/groovy/script/HelloWorld.groovy"));

//调用实例中的某个方法
GroovyObjectgroovyObject=(GroovyObject)groovyClass.newInstance();
Object[]args={};
groovyObject.invokeMethod("run",args);

如果你想使用一个用Groovy脚本实现的接口,你可以这么使用它:

GroovyClassLoadergcl=newGroovyClassLoader();
Classclazz=gcl.parseClass(myStringwithGroovyClassSource"SomeName.groovy");
ObjectaScript=clazz.newInstance();
MyInterfacemyObject=(MyInterface)aScript;
myObject.interfaceMethod();

如果某个Groovy类实现口MyInterface接口,那么上面的代码就会很好的工作.myObject的使用方法与其他实现了MyInterface接口的Java对象一样.

3.Groovy脚本引擎
对于那些想将Groovy脚本嵌入到服务器并且在每次修改后重新装入的人来说,Groovy脚本引擎提供了一个彻底的解决方案.你可以设定系列CLASSPATH作为根来初始化Groovy脚本引擎,这些GLASSPATH可以是URL也可以是目录名.接着你就可以这些根路径下的任何Groovy脚本了.GSE会跟踪脚本间的依赖关系,因此如果任何有依赖关系的脚本被修改,整颗树将会重新编译和载入.
另外,每次执行脚本时,你都可以传入一个包含脚本可接受属性的Binding.脚本执行完以后,传入脚本中的那些属性在Binding中依然有效.下面是一个例子:
/my/groovy/script/path/hello.groovy:

output="Hello,${input}!"

import groovy.lang.Binding;
import groovy.util.GroovyScriptEngine;

String[]roots= new String[]{" /my/groovy/script/path" };
GroovyScriptEnginegse= new GroovyScriptEngine(roots);
Bindingbinding= new Binding();
binding.setVariable( " input " ," world " );
gse.run( " test.groovy " ,binding);
System.out.println(binding.getVariable( " output " ));

将打印 "Hello,world!".

4.运行时依赖
和JDK1.4一样,GroovyJar也依赖与ASM库上的运行时,ASM库包括4个Jar(asm-2.1.jar, asm-util-2.1.jar,asm-attrs-2.1.jar and asm-analysis-2.1). 也就是说,只要将上面的5个Jar添加到路径中,你就能将轻松地Groovy嵌入到你的应用里.

另一种方案可以不用那么多的Jar.你可以用GROOVY_HOME/embeddable目录下的groovy-all-1.0-beta-x.jar.这个Jar包将Groovy和ASM组合打包成一个方便的Jar包.注意:groovy-all-1.0-beta-x.jar中的ASM类使用了不同的命名空间,因此要避免与使用ASM的库发生冲突.

Groovy全攻略--运行篇

Groovy脚本是一个包含许多语句和类声明的文本文件.Groovy的用法和其他脚本语言类似.下面是几种运行Groovy脚本的方法:
1.使用交互控制台
Groovy有一个Swing交互控制台,允许你像使用SQL工具一样输入和执行Groovy语句.控制台支持历史记录,因此你可以向前或向后遍历命令.
如果你已经安装了Groovy二进制分发包,你可以使用下面的命令启动GroovySwing控制台.
如果像启动命令行控制台,可以输入下面的命令:

GroovyConsole



如果想启动命令行控制台,可以输入下面的命令

Groovysh



从源代码分发包中启动SwingGroovy控制台

mavenconsole


2.通过IDE运行Groovy脚本
有一个叫做GroovyShell的类含有main(String[])方法可以运行任何Groovy脚本.你可以用下面的语句执行任何Groovy脚本:

java groovy.lang.GroovyShellfoo/MyScript.groovy [arguments

你可以在你的IDE中使用上面的Groovymain()执行或调试任何Groovy脚本.

3.用命令行执行Groovy脚本
在GROOVY_HOMEbin里有个叫'groovy' 或'groovy.bat' 的脚本文件(或者二者都有,根据你的平台不同而不同).这些脚本文件是Groovy运行时的一部分.
一旦安装了Groovy运行时,你就可以这样运行Groovy脚本:

groovyfoo/MyScript.groovy[arguments]

如果你使用从CVS构建的Groovy,那么除了Groovy脚本以外,命令行上可能还运行着其他的类.
1.拥有main()方法的类;
2.和JUnit的测试一起运行的继承自GroovyTestCase的类,
3.实现Runnable接口的类.run()方法被调用.
获得最新最强的Groovy,输入下面的命令做一个CVS检出

mavengroovy:make-install

在groovy/target/install里会有一份完整的二进制分发包.你可以将groovy/target/install/bin添加到你的路径,这样你就可以轻松地用命令行执行你的Groovy脚本了.

4.用Groovy创建Unix脚本
你可以用Groovy编写Unix脚本并且像Unix脚本一样直接从命令行运行它.倘若你安装的是二进制分发包并且设置好了路径,那么下面的代码将会很好的工作:
将其保存为helloWorld.groovy.

#!/usr/bin/envgroovy
println("Helloworld")
for(ainthis.args){
println("Argument:"+a)
}

接着从命令行运行这个脚本,

chmod+xhelloWorld
./helloWorld

  

爱华网本文地址 » http://www.413yy.cn/a/25101011/86558.html

更多阅读

Groovy快速入门 indesign快速入门

集合(1)List(java.util.List)list =[1, 2, 'hello', new java.util.Date()]assertlist.size() == 4assertlist.get(2) == 'hello'注意:一切都是对象(数字会自动转换)(2)Map(java.util.M

十二 鸡尾酒调制所用6大基酒快速入门 鸡尾酒调制

Spirits(烈酒)是经在水果、谷物、蔬菜等发酵后蒸馏而成的高酒精度液体。关键词:发酵、蒸馏主要有6大类:白兰地(Brandy)-水果烈酒、威士忌(Whisky)、朗姆(Rum)、伏特加(Vodka)、龙舌兰(Tequilla)以及Gin(杜松子酒)-调味烈酒。另外还有力娇酒(Liqueur)。

多成中医使用基础入门 中医基础入门书籍

多成中医使用基础入门此文专为月子病病友整理,如与多成中医网站冲突,一切以网站公布内容为准。同时也也请大家尽量去网站和论坛找答案。(因为此文需要不断完善,担心个人观点会误导大家,所以严禁转载,谢谢理解。初使用者请重点看第五大点

六爻入门 六爻入门书籍

第一章第一节 起卦法  起卦时最好找一个安静的地方,使脑波不受外界音波之干扰。并请注意:起卦时不可玩笑试之,信念尤为重要,否则信息干扰而导致预测不准,并且同一事件不可多次预测。方法:将三枚铜钱合于双手掌,此时默念自己所需预测之

意念移物与隐形空间 意念移物训练快速入门

意念移物与隐形空间 ——昆明超心理学实验室纪实之一(20111022)宫哲兵(武汉大学教授)2009年12月5日,我曾到昆明超心理学实验室考察测试,亲眼看到了小学生们的超感官认字。后写了“耳朵认字真实,疑是右脑功能”一文,发表在《益生文化》杂

声明:《Groovy快速入门 indesign快速入门》为网友奉旨泡妞分享!如侵犯到您的合法权益请联系我们删除