[英]Groovy closure not capturing static closure variable
有人可以解釋為什么qux調用失敗的原因嗎? 創建靜態閉包變量foo時,似乎沒有捕獲到它的名稱。 如果我像在baz中一樣故意將名稱分配給變量,則它可以工作,或者通過類調用它。 我認為該變量捕獲也應適用於閉包類變量,但我必須缺少一些東西。
class C {
static foo = { "foo" }
static bar = { C.foo() }
static baz = { def f = foo; f() }
static qux = { foo() }
}
println C.foo() //works
println C.bar() //works
println C.baz() //works
println C.qux() //fails
我也嘗試將其作為測試,捕獲i變量沒有問題:
class C {
static i = 3
static times3 = { "foo: ${it * i}" }
}
println C.times3(2) //works
[edit]最后,如果foo只是一個方法,它也可以按照我的預期工作:
class C {
static foo() { "foo" }
static bar = { foo() }
}
println C.bar() //works
好像是這個bug 。 如果將foo
作為屬性,它將起作用:
class C {
static foo = { "foo" }
static bar = { C.foo() }
static baz = { def f = foo; f() }
static qux = { foo.call() }
}
assert C.foo() == 'foo'
assert C.bar() == 'foo'
assert C.baz() == 'foo'
assert C.qux() == 'foo'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.