Groovy不同于其它编译语言的事情之一是你能创建优先的类对象.意思是说你
能定义一大堆代码并且可以在里面放string或integer.看看下面的代码:
这里的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就成拼凑字符串了.
自己运行一下看看输出结果吧.