何為閉包?
是引用了自由變量的函數。這個函數通常被定義在另一個外部函數中,并且引用了外部函數中的變量。 -- wikipedia
是一個可調用的對象,它記錄了一些信息,這些信息來自于創建它的作用域。-- Java編程思想
是一個匿名的代碼塊,可以接受參數,并返回一個返回值,也可以引用和使用在它周圍的,可見域中定義的變量。-- Groovy
是一個表達式,它具有自由變量及邦定這些變量的上下文環境。
閉包允許你將一些行為封裝,將它像一個對象一樣傳來遞去,而且它依然能夠訪問到原來第一次聲明時的上下文。
是指擁有多個變量和綁定了這些變量的環境的表達式(通常是一個函數),因而這些變量也是該表達式的一部分。
閉包是可以包含自由(未綁定)變量的代碼塊;這些變量不是在這個代碼塊或者任何全局上下文中定義的,而是在定義代碼塊的環境中定義。
閉包的價值在于可以作為函數對象或者匿名函數,持有上下文數據,作為第一級對象進行傳遞和保存。
何為Groovy?
Groovy 是一種動態語言。這種語言比較有特點,它和 Java 一樣,也運行于 Java 虛擬機中。恩??對頭,簡單粗暴點兒看,你可以認為 Groovy 擴展了 Java 語言。比如,Groovy對自己的定義就是:Groovy 是在 java 平臺上的、 具有像 Python , Ruby 和 Smalltalk 語言特性的靈活動態語言, Groovy 保證了這些特性像 Java 語法一樣被 Java 。 開發者使用。除了語言和 Java 相通外,Groovy 有時候又像一種腳本語言。前文也提到過,當我執行Groovy 腳本時,Groovy 會先將其編譯成 Java 類字節碼,然后通過 Jvm 來執行這個 Java 類。
圖 1 展示了 Java、Groovy 和 Jvm 之間的關系。
實際上,由于 Groovy Code 在真正執行的時候已經變成了 Java 字節碼,所以 JVM 根本不知道自己運行的是 Groovy 代碼