我的漫漫程序之旅

专注于JavaWeb开发
随笔 - 39, 文章 - 310, 评论 - 411, 引用 - 0
数据加载中……

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就成拼凑字符串了.

自己运行一下看看输出结果吧.


posted on 2008-05-07 14:26 々上善若水々 阅读(903) 评论(0)  编辑  收藏


只有注册用户登录后才能发表评论。


网站导航: