Closure comparator = { String a, String b ->
a.compareToIgnoreCase(b)
}
這樣很明白了吧,Closure的確是物件。差別在這個物件把自己當參數傳入某個方法後,這個方法會執行 Closure裡的行為。
當然在宣告的時候和傳統的「方法」不同,你要用 { } 括起來,而且要寫 = 。
參數也不是方法一樣的宣告方式,不過概念是一樣的。
只要能接受語法後,就把它想成「動態的方法」就好了。
在書上的例子寫到
Closure comparator = { String a, String b ->
a.compareToIgnoreCase(b)
}
List fruit = [ "apple", "Orange", "Avocado", "pear", "cherry" ]
fruit.sort(comparator)
println "Sorted fruit: ${fruit}"
這是一種寫法。先定義好有名有姓的閉包,當然 sort 也要接受這樣的閉包,不然你也是白寫的。 能夠變的地方在裡面實作的「比較方式」而已。 若還記得我們上篇文章,那是一種更直接寫的寫法。就像暱名的方法一樣。
rpt_list.sort{o1,o2->
o1.total<=>o2.total
}
後面還會很大量的使用 Closure,所以目前暫時還不習慣也是無所謂的。
沒有留言:
張貼留言