Groovy不同于其它编译语言的事情之一是你能创建优先的类对象.意思是说你
能定义一大堆代码并且可以在里面放string或integer.看看下面的代码:
式当作代码来对待.在软件世界,这个叫做"闭包".在这个例子中,设计者 "it" 是你要给这个函数
赋值的参数.我们像以下方式来访问:
再试试下面这句:
来调用它.来看一下"collect"函数在数组中的例子:
这个表达式的意思是,用1,2,3,4创建一个数组,然后调用"collect"方法,进入我们上面定义的闭包.collect方法贯穿数组里的每一项,每一项都调用闭包,然后把结果放入一个新数组中.
结果是:
http://groovy.codehaus.org/groovy-jdk.html
默认的闭包带一个参数"it",你也能创建闭包用自命名参数.例如方法Map.each()
就是一个闭包两个参数,它绑定了键和值.
结果:
还有一些闭包例子:
下面是匿名闭包的例子:
文件处理:
字符串处理:
这里和Java语法的差不多了.
注意第三行一定要toInteger().
不然的话+1就成拼凑字符串了.
自己运行一下看看输出结果吧.
能定义一大堆代码并且可以在里面放string或integer.看看下面的代码:
square
=
{it * it}
这里的it是关键字,不能改变.在花括号里面的表达式"it * it"告诉Groovy编译器把这个表达
式当作代码来对待.在软件世界,这个叫做"闭包".在这个例子中,设计者 "it" 是你要给这个函数
赋值的参数.我们像以下方式来访问:
square(
9
)
看看结果是什么:81
再试试下面这句:
square
=
{(it * it / 2 + 3) /it }
结果:
Result:
4.8333333333
你可能给square赋一值也没什么意思.这有一些内建函数,你能像这样做为一个参数
来调用它.来看一下"collect"函数在数组中的例子:
[
1
,
2
,
3
,
4
].collect(square)
这个表达式的意思是,用1,2,3,4创建一个数组,然后调用"collect"方法,进入我们上面定义的闭包.collect方法贯穿数组里的每一项,每一项都调用闭包,然后把结果放入一个新数组中.
结果是:
[
1
,
4
,
9
,
16
]
你能使用更多的参数闭包,具体可参看
http://groovy.codehaus.org/groovy-jdk.html
默认的闭包带一个参数"it",你也能创建闭包用自命名参数.例如方法Map.each()
就是一个闭包两个参数,它绑定了键和值.
printMapClosure
=
{ key, value -> println key + "=" + value }
[ " yue " : " wu " , " lane " : " burks " , " sudha " : " saseethiaseeleethialeselan " ].each(printMapClosure)
[ " yue " : " wu " , " lane " : " burks " , " sudha " : " saseethiaseeleethialeselan " ].each(printMapClosure)
结果:
yue
=
wu
lane = burks
sudha = saseethiaseeleethialeselan
lane = burks
sudha = saseethiaseeleethialeselan
还有一些闭包例子:
fullString
=
""
orderParts = [ " BUY " , 200 , " Hot Dogs " , " 1 " ]
orderParts.each {
fullString += it + " "
}
println fullString
orderParts = [ " BUY " , 200 , " Hot Dogs " , " 1 " ]
orderParts.each {
fullString += it + " "
}
println fullString
下面是匿名闭包的例子:
myMap
=
[
"
asdf
"
:
1
,
"
qwer
"
:
2
,
"
sdfg
"
:
10
]
result = 0
myMap.keySet().each( { result+= myMap[it] } )
println result
result = 0
myMap.keySet().each( { result+= myMap[it] } )
println result
文件处理:
myFileDirectory
=
"
C://temp//
"
myFileName = " myfile.txt "
myFile = new File(myFileDirectory + myFileName)
printFileLine = { println "File line: " + it }
myFile.eachLine( printFileLine )
这个例子打印C:/myfile.txt的内容,你可以随便输入一些内容进行测试.
myFileName = " myfile.txt "
myFile = new File(myFileDirectory + myFileName)
printFileLine = { println "File line: " + it }
myFile.eachLine( printFileLine )
字符串处理:
stringDate
=
"
2005-07-04
"
dateArray = stringDate.split( " - " )
year = dateArray[ 0 ].toInteger()
year = year + 1
newDate = year + " - " + dateArray[ 1 ] + " - " + dateArray[ 2 ]
dateArray = stringDate.split( " - " )
year = dateArray[ 0 ].toInteger()
year = year + 1
newDate = year + " - " + dateArray[ 1 ] + " - " + dateArray[ 2 ]
这里和Java语法的差不多了.
注意第三行一定要toInteger().
不然的话+1就成拼凑字符串了.
自己运行一下看看输出结果吧.