这是一个代码示例:
class StaticTest {
static def list = [1, 2, 3]
void printsNothing() {
[].with { list.each { println it } }
}
void printsList() {
new Object().with { list.each { println it } }
}
public static void main(String[] args) {
new StaticTest().with {
println "Expected: "
printsList()
println "Strange: "
printsNothing()
}
}
}
正如您所看到的,printsNothing
和printsList
中的闭包是相同的,但结果不同,因为printsNothing
确实不打印任何内容,就像list
为空。这是输出:
Expected:
1
2
3
Strange:
我在启用了invokedynamic支持时使用了Groovy 2.2.2。
关于这是一个bug还是我对Groovy一无所知的任何建议?
答案 0 :(得分:2)
这是在user mailing list recently,这是因为它在空列表的所有元素(和list
)中寻找属性[].list == []
。如果您将printsNothing
方法更改为:
void printsNothing() {
// Use this.list to get round local `with` scoping
[].with { this.list.each { println it } }
}