Groovy闭包
Groovy闭包
def
?factorial?
=
?[
2
,
3
,
4
,
5
].inject(
1
){previous,?element?
->
?previous?
*
?element}
println? " Factorial(5):?${factorial} " -----------
def?fact?
=
?
1
[ 2 , 3 , 4 , 5 ] . each {number? -> ?fact? *= ?number} println? " fact:?${fact} " -----------
def
?list?
=
?[
2
,
5
]
factorial? = ?list.inject( 1 ){previous,?element? -> ?previous * element} println? " Factorial(5):?${factorial} " -----------
list?
=
?[
2
,
5
]
def ?closure? = ?{previous,element? -> ?previous * element} factorial? = ?list.inject( 1 ,?closure) println? " Factorial(5):?${factorial} " ----------- 由于闭包也是一个对象,因此它可以作为方法的参数。
//
Find?those?items?that?qualify
def ?filter(list,?predicate){ ???? return ?list.findAll(predicate) } // Two?predicate?closure def ?isEven? = ?{x? -> ? return ?(x % 2 ? == ?0)} def ?isOdd? = ?{x? -> ? return ?!isEven(x)} def ?table? = ?[ 11 , 12 , 13 , 14 ] // Apply?filter def ?evens? = ?filter(table,?isEven) println? " evens:?${evens} " def ?odds? = ?filter(table,?isOdd) println? " odds:?${odds} " ----------- 例:闭包作为另一个闭包的参数
//
Find?initial?list?that?conforms?to?predicate
def ?takeWhile? = ?{predicate,list? -> ???? def ?result? = ?[] ???? for (element? in ?list){ ???????? if (predicate(element)){ ????????????result << element ????????}? else { ???????????? return ?result ????????} ????} ???? return ?result } // Two?predicate?closures def ?isEven? = ?{x? -> ? return ?x % 2 ? == ?0} def ?isOdd? = ?{x? -> ? return ?!isEven(x)} def ?table1? = ?[ 12 , 14 , 15 , 18 ] def ?table2? = ?[ 11 , 16 , 18 ] // Apply?takeWhile def ?evens? = ?takeWhile.call(isEven,?table1) println? " evens:?${evens} " def ?odds? = ?takeWhile.call(isOdd,?table2) println? " odds:?${odds} " ------------ 例:闭包作为返回值
def
?multiply(x){
???? return ?{y? -> ? return ?x * y} } def ?twice? = ?multiply( 2 ) println? " twice(4):?${twice(4)} " // Closure?returning?a?closure def ?multiplication? = ?{x? -> ? return ?{y? -> ? return ?x * y}} def ?quadruple? = ?multiplication( 4 ) println? " quadruple(3):?${quadruple(3)} " ------------ 例:选择性排序
def
?selectionSort?
=
?{list?
->
???? def ?swap? = ?{sList,p,q? -> ? ???????? def ?temp? = ?sList[p] ????????sList[p]? = ?sList[q] ????????sList[q]? = ?temp ????} ???? def ?minimumPosition? = ?{pList, from ? -> ???????? def ?mPos? = ? from ???????? def ?nextFrom? = ? 1 ? + ? from ???????? for (j? in ?nextFrom.. < pList.size()){ ???????????? if (pList[j]? < ?pList[mPos]) ????????????????mPos? = ?j ????????} ???????? return ?mPos ????} ???? def ?size? = ?list.size()? - ? 1 ???? for (k? in ?0..size){ ???????? def ?minPos? = ?minimumPosition(list,?k) ????????swap(list,?minPos,?k) ????} ???? return ?list } def ?table? = ?[ 13 , 11 , 14 ] def ?sorted? = ?selectionSort(table) println? " sorted:?${sorted} " ------------结果:sorted: [11,12,14,14] (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |