Groovy之旅系列三(数据编码与闭包)

本文介绍了Groovy语言中闭包的概念及其用法,包括如何定义和调用闭包,闭包与数组操作,以及闭包在文件处理和字符串操作中的应用。
Groovy不同于其它编译语言的事情之一是你能创建优先的类对象.意思是说你
能定义一大堆代码并且可以在里面放string或integer.看看下面的代码:

square = {it * it}
这里的it是关键字,不能改变.在花括号里面的表达式"it * it"告诉Groovy编译器把这个表达
式当作代码来对待.在软件世界,这个叫做"闭包".在这个例子中,设计者 "it" 是你要给这个函数
赋值的参数.我们像以下方式来访问:
square(9)
看看结果是什么:81

再试试下面这句:
square = {(it * it / 2 + 3/it }
结果:
Result: 4.8333333333
你可能给square赋一值也没什么意思.这有一些内建函数,你能像这样做为一个参数
来调用它.来看一下"collect"函数在数组中的例子:
1234 ].collect(square)

这个表达式的意思是,用1,2,3,4创建一个数组,然后调用"collect"方法,进入我们上面定义的闭包.collect方法贯穿数组里的每一项,每一项都调用闭包,然后把结果放入一个新数组中.
结果是:
14916 ]
你能使用更多的参数闭包,具体可参看
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


还有一些闭包例子:
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

文件处理:

myFileDirectory = "C:\\temp\\"
myFileName 
= "myfile.txt"
myFile 
= new File(myFileDirectory + myFileName)

printFileLine 
= { println "File line: " + it }

myFile.eachLine( printFileLine )
这个例子打印C:\myfile.txt的内容,你可以随便输入一些内容进行测试.

字符串处理:
stringDate = "2005-07-04"
dateArray 
= stringDate.split("-")
year 
= dateArray[0].toInteger()
year 
= year + 1
newDate 
= year + "-" + dateArray[1+ "-" + dateArray[2]

这里和Java语法的差不多了.
注意第三行一定要toInteger().
不然的话+1就成拼凑字符串了.

自己运行一下看看输出结果吧.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值