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"函数在数组中的例子:
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


还有一些闭包例子:
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、付费专栏及课程。

余额充值