如果你仔细看,在包括图片,你会发现,你可以使用Eclipse IDE重构Groovy代码和方法转换为闭合,反之亦然。那么,封闭又是什么?它与方法有什么不同?有人能给出一个使用闭包的好例子,以及为什么它是一个有用的功能?匿名内部类不够好?
回答
Closure是一个Closure类实例,实现调用逻辑。 它可以作为参数传递或分配给一个变量。它也有一些关于范围变量访问和委托调用的逻辑。
方法是普通的Java方法。没什么特别的。
是的,匿名内部类有很多样板代码来执行简单的操作。
比较:
button.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent e) {
frame.dispose();
}
}
);
VS
button.addActionListener { frame.dispose() }
上有SO Groovy : Closures or Methods 和3链接到用户指南含有很多有用的信息一个相关的问题。
查看[某些原因](http://www.javanicus.com/blog2/items/191-index.html)你的例子不是真正的词法关闭,甚至Groovy的创造者都称它为“根本性破碎”。 –
@VorgvanGeir非常感谢有趣的链接,但我不确定它是否与OP的问题相关。 – Seagull
@海鸥您发布的codehaus链接已不存在。你能否用这个更新它们:http://groovy-lang.org/closures.html。提前致谢。 –
而且,闭包是第一类对象,它们可以通过周围,返回和操纵。考虑:
def add = { n, m -> n + m }
def add2 = add.curry(2)
assert add2(4) == 6
def makeAdder = { n ->
// return a Closure
{ m -> n + m }
}
def anotherAdd2 = makeAdder(2)
assert anotherAdd2(4) == 6
- 1. 非虚拟方法和密封方法有什么区别?
- 2. 识别封闭区域的算法
- 3. Grails/groovy测试 - assert和assertEquals方法之间的任何区别
- 4. 封闭函数的区别?
- 5. 方法firstObject vs objectAtIndex的用法有什么区别:0?
- 6. Groovy中类的方法别名
- 7. Groovy的getAt()与get()方法
- 8. MOM vs SOA?区别?
- 9. Groovy中的vs与Identify Block
- 10. Groovy XmlSlurper vs XmlParser
- 11. Groovy的:添加一个方法来封闭
- 12. Python csv.reader vs csv.dictreader的区别?
- 13. this.method VS prototype.method - 是的区别
- 14. STRCHR vs STRRCHR的区别?
- 15. keytool -genkey vs -genkeypair的区别
- 16. SSI vs JSP的区别?
- 17. python2 vs python3 multiprocessing的区别?
- 18. nohup vs现在的区别
- 19. Inode vs Vnode的区别
- 20. freeglut vs glew的区别?
- 21. Groovy - get和propertyMissing之间的区别?
- 22. 方法VS物业在C#中 - 有什么区别
- 23. jQuery serialize()方法vs JSON.stringify()有什么区别?
- 24. laravel方法与特质vs外观有什么区别
- 25. 静态方法调用vs委托方法调用有什么区别?
- 26. 封装与抽象的区别
- 27. Javascript中冻结与封印的区别
- 28. 模块和封闭之间的区别
- 29. Groovy 1.8.2和Groovy 1.9-beta-3有什么区别?
- 30. Groovy的“execute”方法和正常运行bash命令有什么区别?
我删除了'java'标记,因为问题纯粹是关于Groovy语言,而不是它运行的JVM或Java语言。 –
http://groovy.codehaus.org/Closures –