假设我们有这样的代码:
class Test {
def fun1() { println 'a' }
def fun2() { println 'b' }
def fun3() { println 'c' }
}
def test = new Test()
test.fun1()
test.fun2()
test.fun3()
我们可以通过Object上的with方法省去test对象的限定:
test.with {
it.fun1()
it.fun2()
it.fun3()
}
// 或者连it也省去
test.with {
fun1()
fun2()
fun3()
}
我们可以从Groovy的源代码中看到这是如何实现的,在org.codehaus.groovy.runtime.DefaultGroovyMethods中:
public static Object with(Object self, Closure closure) {
final Closure clonedClosure = (Closure) closure.clone();
clonedClosure.setDelegate(self);
return clonedClosure.call(self);
}
可以看出这是通过把对象赋值给闭包的delegate属性和作为参数传递给闭包来实现的。
分享到:
相关推荐
Groovy 学习笔记 Groovy 学习笔记
Groovy
在学习任何东西之前,最重要的是培养兴趣,Groovy世界最耀眼的技术之一--Grails相信大家早已耳闻,我将通过Grails实战系列文章 向您展现Grails的迷人风采,使您感受到Grails的魅力,以至疯狂地爱上Grails,并坠入...
Groovy学习笔记,内容如下: 1.概念 2.基本语法 3.字符串 4.集合 5.类和闭包 6.控制语句 7.操作符重载 8.I/O操作 9.高级应用 10.正则表达式
对Groovy开发环境设置,基本语法做了简单明了的介绍
第1章 数字和字符串 第2章 List的简单介绍 第3章 String的特殊用法 第4章 闭包 第5章 集合+闭包 第6章 Map和Range 第7章 函数
图文并茂,适合入门新手,涵盖了基本的语法讲解及一些DEMO测试,值得一看
NULL 博文链接:https://rsljdkt.iteye.com/blog/859059
Groovy语法&Gradle配置学习笔记
Groovy_笔记
NULL 博文链接:https://key232323.iteye.com/blog/1336400
With relevant examples, careful explanations of Groovy's key concepts and features, and insightful coverage of how to use Groovy in-production tasks, including building new applications, integration ...
Grails Groovy 学习必备参考资料
很好的学习Groovy的学习资料, 很实用。。 个人感觉Groovy是Java敏捷开发的首选。
Groovy学习资料-中文.rar。Groovy学习资料。Grails学习资料。mht网页格式。
Groovy 调用 Java 类groovy 调用 Java class 十分方便,只需要在类前导入该 Java 类,在 Groovy 代码中就可以无缝使用该
Java中使用Groovy的三种方式,详细见我的博客。
Groovy in Action的源代码。Groovy in Action的源代码。
Groovy 是基于Java的脚本语言。是Java语言扩展,因此可以与Java语言互相...由于Groovy的超级灵活性,你可以使用Groovy快速编写基于领域的小语言,从而将编码量进一步减少,程序更容易维护。越少的代码表明越少的错误。