簡體   English   中英

Groovy閉包未捕獲靜態閉包變量

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM