第三种声明闭包的方式是重用已有的声明:一个方法。方法有一个方法体,可选的返回值,能够接受参数,并且能够被调用,与闭包的相似性是显而易见的,因此 groovy 让你重用你已 经在 方法中存在的代 码,但是作为一 个闭包 ,引 用一 个方法 作为 闭包 是使用 reference.& 操作符,reference 是闭包调用时使用的对象实例,正如一个一般的方法调用 reference.someMethod()。
图 5.1 显示了声明一个方法闭包。
图 5.1 简单方法闭包赋值语句的解析
列表 5.2 演示了方法闭包在实际中的用法,显示两个不同实例被用来获取两个不同的闭包,即使在两个对象上调用的都是相同的方法。
每一个实例(在(1)创建)的 validat ion 方法都独立的判断给定的字符串是否有效,我们在(2)处使用 first.&valid ate 创建一个引用,通过 second.&validat e 显示这个引用可以作为变量被传递(如(3)),或者作为一个参数传递给 find 方法(如(4)),我们使用简单的单词列表来检查闭包是否像我们期望的那样工作。
方法闭包被限制在一个实例方法,但他们有另外一个有趣的特性——运行时重载,就象我们知道的(方法多态)mult imethods,在后面将了解到更多的(方法多态)multimethods,表5.3 给出了一个体验。
这里确实是使用的单个实例,并且确实是一个闭包(在(1)处),但每次调用的时候,不同的方法被调用(在(2)处),在后面将了解到这种动态行为的更多信息。
现在你已经看到了所有的声明闭包的方式,值得停下来一会儿,并且把它们放在一起,通过不同的声明执行相同的功能。