1
qux에 대한 호출이 실패하는 이유를 설명 할 수 있습니까? 정적 닫힘 변수 foo을 만들 때 그 이름을 캡처하지 않는 것 같습니다. 변수 이름을 baz처럼 의도적으로 지정하거나 클래스를 통해 호출하면됩니다. 이 변수 캡쳐가 클로저 클래스 변수에서도 작동해야한다고 생각했지만 무언가를 놓치고 있어야합니다.Groovy 클로저가 정적 종료 변수를 캡처하지 않음
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
는 또한 테스트로 이것을 시도하고는 내가 변수를 캡처 아무 문제가 없었다 :
class C {
static i = 3
static times3 = { "foo: ${it * i}" }
}
println C.times3(2) //works
[편집] 마지막으로, foo는 단순히 방법의 경우, 그것은 또한 예상대로 작동합니다.
class C {
static foo() { "foo" }
static bar = { foo() }
}
println C.bar() //works
좋은 점은 버그 데이터베이스에서 찾아보세요! 나는 그것이 정확히 그 문제와 같다고 생각한다. 주변에있는 것처럼 보입니다. – jrk
Groovy 3에서 수정 예정. 특성과 새로운 MOP를 사용하면 v3가 막힙니다. – Will