Groovy - closure
3443 ワード
Summary closure翻译成闭包,ここではまず翻訳しないでください.Groovyの強力な特性です. closureには、コードロジック、最後の行の文、戻り値を表す文、returnキーを使用する文が含まれます. closureをパラメータとして別のclosureに渡すとともに、1つのclosureから1つのclosureを返すことができます.
定義&呼び出し&戻り値デフォルト定義が完了するとコードは実行されず、呼び出されたときにコードを実行する必要があります. 注:closureを呼び出すたびにclosureオブジェクトが作成されます.
义齿パラメータ定義は パラメータ名は重複できませんが、1つのclosureが別のclosureをネストしている場合は、デフォルトのitで問題ないパラメータがあります.
MethodはClosureをparamとして使用
ClosureのthisキーClosureが存在するクラスのオブジェクトを表します.
ClosureのownerオブジェクトClosureのownerは、Closureを直接含むクラスまたはClosureオブジェクトです.つまり、Closureが直接クラスに定義されている場合、ownerはクラスのオブジェクトです.ClosureがClosureに直接定義されている場合、ownerはClosureオブジェクトです.
Closureのdelegate
Closureの一般的な方法 closure.getMaximumNumberOfParameters()このclosureで受信可能なパラメータの数を取得します.
Reference
https://www.jianshu.com/p/c02a456e1943
定義&呼び出し&戻り値
// closure 。
def x = {
def y = 1
// y, return y
y
}
//
x.call()
x()
义齿
->
記号の前に書かれており、呼び出すときに呼び出す方法と同じようにカッコに直接パラメータを書き込む.//
def closure = { x -> x * 3 }
// , closure , `it` 。
def closure = { it * 3 }
//
def closure = { int a, int b -> a + b }
// closure
def closure = { -> 88}
// Closure param。
def closure = { String... args1 -> args1.join(" ")}
println closure("Hello", "Closure!")
MethodはClosureをparamとして使用
class Main {
// method, Closure param
static def methodWithClosureParam(Closure closure){
closure()
}
static def methodWithClosureParamEnd(String str, Closure closure){
println(str)
closure()
}
static void main(args) {
// Closure groovy.lang.Closure 。
def closure = { println "Closure!"}
println closure instanceof Closure // true
// , Closure
methodWithClosureParam {println "Groovy 1"} // 。
methodWithClosureParam closure // 。
methodWithClosureParam(closure) // , 。
// method param Closure , 。
methodWithClosureParamEnd("Param One", closure)
methodWithClosureParamEnd("Param One", { println "Closure!"})
methodWithClosureParamEnd("Param One") { println "Closure!"}
}
}
Closureのthisキー
class Test {
void run() {
// Closure this class Object。
def whatIsThis = { this }
println whatIsThis() == this
println this
}
}
class Main {
static void main(args) {
def test = new Test()
test.run() // true Test@212bf671
println test // Test@212bf671
}
}
Closureのownerオブジェクト
class Test {
class Inner {
def closure = { owner }
}
void run() {
Closure closure = { owner }
println closure() == this
println this
}
}
Closureのdelegate
Closureの一般的な方法
Reference
https://www.jianshu.com/p/c02a456e1943