`
lggege
  • 浏览: 375484 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Groovy闭包深入学习

阅读更多
闭包

1. 定义和执行闭包
def one = { num1, num2 ->
	println "param is: $num1 & $num2"
}
one(2, 3)       // 简便写法。输出 param is: 2 & 3
one 2, 3        // 省略()的等效写法

one.call(2, 3) // 使用call方法
one.call 2, 3  // 省略()等效写法

注意:
  • a) 闭包自身的定义写法。在参数与具体代码执行端间的分隔符是->,老版本的是|
  • b) 使用call方法,或简便写法。
  • c) 由于groovy可省略(),而引发的众多等效写法。
  • d) 单参数,可省略书写参数,在闭包内使用it变量引用参数。


2. 闭包作为参数返回
def makeClosure(name) {
    return {
        println "Hello ${name}"
    }
}

println makeClosure(‘World’) // 请问输出结果? 

3. 闭包作为参数传递
def run(closure) {
	closure.call()
}

one = { println 'Hello, World!' }

run(one)


4. 闭包使用外部变量
class OneClosure {
	def static execute(closure) {
		def word = 'Cool' // !!! 注意不使用def的输出结果,理解方式使用引用
		closure('Grails')
	}
	
	public static void main(args) {
		def word = 'Hello'
		
		def two = {param -> println "${word} ${param}"}
		two('Groovy') // 输出 Hello Groovy
		
		word = 'Wow'
		two('Java') // 输出 Wow Java
		
		OneClosure.execute(two) // 输出 Wow Grails,而不是Cool Grails
	}
}

注意:
  • a) 闭包可使用(引用)闭包外部定义的变量
  • b) 变量的定义必须在闭包的上面,否则有groovy.lang.MissingPropertyException异常。
  • c) 注意在代码标记出,如果不使用def的输出差异。具体解释可使用引用来理解。在一个闭包被定义后,使用的是闭包定义所在的外部对象,对于使用的外部对象的引用一直都不会改变(无论是否被作为参数传递)。


5. 使用闭包实现单方法接口
interface Test {
    def one()
}

def test = {println 'one'} as Test

test.one()


  • a) 使用关键字as


6. 使用闭包实现多方法接口
interface Test {
    def one()
    def two()
}

def test = [
    one: {println 'one'},
    two: {println 'two'}
    ] as Test

test.one()
test.two()

  • a) 使用关键字as
  • b) 使用Map, key为接口名,value为闭包

分享到:
评论
5 楼 回归蔚蓝 2015-06-29  
好文,归纳的太准确了
4 楼 零度弥合 2015-05-21  
写的真好,赞赞赞。
3 楼 zk1878 2014-01-16  
不错,好文
2 楼 longhu1222 2012-10-26  
顶。。。很不错。。。。
1 楼 ykyeah 2010-04-08  
不错啊

相关推荐

    Groovy学习笔记 PDF版

    书中的例子和练习将帮助你深入理解Groovy的强大功能,并提升你的编程技巧。 总之,Groovy为Java开发者提供了一个更加灵活和高效的工具,无论你是想简化日常的脚本任务,还是希望构建复杂的Web应用程序,学习Groovy...

    [Groovy入门]第五讲.将流程控制语句与方法重构为闭包

    在学习Groovy的过程中,掌握闭包这一核心概念至关重要,尤其是在重构流程控制语句和方法时。本讲我们将深入探讨如何将传统的流程控制结构和方法转换为Groovy的闭包,以提高代码的可读性和可维护性。 首先,让我们...

    groovy包及相关学习资料

    - **书籍**:“Groovy in Action” 和 “Groovy Programming: An Introduction to Building Domain-Specific Languages” 是两本深入学习Groovy的经典书籍。 - **在线课程**:网站如Coursera、Udemy等提供在线课程...

    Groovy 学习资料

    Groovy是一种动态、灵活的编程语言,它是Java平台上的一个主要面向开发者的工具,尤其在敏捷开发中备受青睐。...通过深入学习和实践,你将能充分利用Groovy的强大功能,提升你的开发效率和代码质量。

    Groovy学习资料

    Groovy是一种动态、灵活的编程语言,它是Java平台上的一个强类型、...通过深入学习和实践这份"Groovy学习资料"中的内容,开发者将能够熟练掌握Groovy语言,并能够将其运用到实际项目中,实现项目的高效开发和顺利上线。

    groovy 最新 学习 动态

    本篇文章将深入探讨Groovy的最新学习动态,特别是它在敏捷开发、动态语言特性以及Web应用开发中的应用。 首先,让我们来理解Groovy的敏捷开发特性。敏捷开发是一种以人为核心、迭代、逐步交付的软件开发方法论。...

    groovy学习

    Groovy是一种动态、开源的编程语言,它设计用于在Java平台上运行,并且与Java高度兼容。...通过深入学习和实践,开发者可以充分利用Groovy的优势,提升工作效率,特别是在处理动态性和灵活性要求较高的任务时。

    Groovy学习笔记.pdf

    对于初学者来说,深入理解这些基础知识是非常重要的,它们将帮助你更好地掌握Groovy并有效地利用其优势进行开发。 总之,Groovy以其简洁的语法、强大的元编程能力和与Java的紧密集成,成为了Java开发者的一个有力...

    Groovy学习笔记

    ### Groovy学习笔记知识点梳理 #### 一、Groovy简介 - **概念**:Groovy是一种灵活的脚本语言,其设计初衷是为了更好地服务于Java开发者。它具备许多现代动态语言的特点...这些知识点为后续深入学习提供了坚实的基础。

    Groovy轻松入门—搭建Groovy开发环境

    Groovy是一种基于Java平台的动态、灵活的编程语言,它扩展了Java的语法,提供了更加简洁和易读的...接下来,你可以继续深入学习,掌握Groovy的高级特性,如领域特定语言(DSLs)、Grails框架等,以提升你的开发效率。

    Grails&Groovy学习资料

    "Grails&Groovy参考资料"这个压缩包文件很可能是包含各种教程、文档、示例代码和其他学习资源的集合,可以帮助你深入理解和实践这两个技术。在学习过程中,你可以结合这些资料,通过阅读、编程练习和实际项目来提升...

    Groovy学习资料(包括Groovy in action 的中英文以及API)

    因此,无论是对于Java开发者寻求扩展技能,还是对于想要探索新语言特性的程序员,Groovy都是一门值得深入学习的语言。 总的来说,"Groovy in Action"提供了全面的学习材料,配合API文档,可以帮助开发者迅速掌握...

    Groovy安装以及简单使用

    Groovy是一种基于Java平台的动态编程语言,它与Java语法高度兼容,但提供了更简洁、更灵活的写法,使得开发更加高效。...通过深入学习和实践,我们可以利用Groovy的优势提高生产力,解决实际问题。

    groovy

    3. 支持闭包:Groovy中的闭包类似于函数引用,可作为参数传递,有助于实现函数式编程风格。 4. GString:类似于Java的字符串,但支持占位符表达式,使字符串操作更便捷。 5. 链式调用:对象属性和方法可以连续调用,...

    groovy+in+action

    ### Groovy in Action:深入学习Groovy编程语言 #### 一、引言 《Groovy in Action》是一本详尽介绍Groovy编程语言的书籍,由Dierk König撰写,并得到了Andrew Glover、Paul King、Guillaume Laforge以及Jon ...

    apache-groovy-sdk-3.0.6.zip

    7. **函数式编程支持**:Groovy支持闭包和高阶函数,这使得函数式编程风格在Groovy中变得非常自然,提高了代码的可读性和可维护性。 8. **动态和静态类型**:Groovy允许开发者在同一个项目中同时使用动态和静态类型...

    某些必要的groovy

    "某些必要的Groovy"可能指的是学习和应用Groovy时的一些核心概念和关键特性。 1. **简洁的语法**:Groovy的语法设计得比Java更为简洁,使得代码更易读写。例如,它允许省略括号和分号,使代码看起来更加紧凑。 2. ...

    groovy学习资料

    Groovy是一种动态、灵活...通过深入学习Groovy,开发者不仅可以提升个人技能,还能在实际项目中提高开发效率,尤其是在构建脚本、自动化任务和DSL时。对于已经熟悉Java的开发者来说,Groovy是一个值得学习的扩展工具。

Global site tag (gtag.js) - Google Analytics