美文网首页
1.3_Groovy 闭包和对象

1.3_Groovy 闭包和对象

作者: Android_Dev | 来源:发表于2017-12-22 21:21 被阅读19次

    闭包_是groovy语言的一个声明函数的方式. 它有2个非常有趣的特性:

    一是:是一个值(像一个string,number一样)可以赋给一个变量

    二是:在其类部可以使用可触及范围内声明的变量

    1.声明闭包

    task groovy {}

    def foo = "One million dollars"

    def myClosure = {

        println "Hello from a closure"

        println "The value of foo is $foo"

    }

    myClosure() // 调用与函数调用一样

    def bar = myClosure // 又是一个值,可以赋值给变量

    def baz = bar

    baz()

    2.对于参数,闭包有另一种表示方式

        def doubleIt = { x -> x + x}

    3.groovy语言是允许高阶式函数编程,即可以将一个函数作为参数坐传递给别一个参数

    def applyTwice(func, arg){

            func(func(arg))

    }

    foo = 5

    def fooDoubledTwice = applyTwice(doubleIt, foo)

    println "Applying doubleIt twice to $foo equals $fooDoubledTwice"

    4.对于List列表groovy有自己非常简单处理方式-用闭包

    def myList = ["Gradle", "Groovy", "Android"] // 声明一个list数据集

    def printItem = {item -> println "List item: $item"} // 定义一个闭包,打印list中的每一个item元素

    myList.each(printItem) // list.each(closure)函数 接受一个闭包

    当然,我们还可以更加简化这种表示方式,声明闭包在一行里,去除两个大括号,除此之外

    如果一个闭包接受的是单个参数的话,默认情况,这个参数名称用"it"表示,如下简化上例打印list的表示方式

       myList.each{println "Compactly printing each list item: $it"} 

    5.类的声名:groovy声名一个类有非常简单的语法,groovy声明的类底层本质上就是java class,而groovy会自动为其class的属性会自动生成getter和setter方法

    class GroovyGreeter {

        String greeting = "Default greeting"

        def printGreeting(){println "Greeting: $greeting"}

    }

    def myGroovyGreeter = new GroovyGreeter()

    myGroovyGreeter.printGreeting()

    myGroovyGreeter.greeting = "My custom greeting"

    myGroovyGreeter.printGreeting()

    6.groovy的最后一个特性是闭包可以有一个代理对象.任何在闭包中没有在本地定义的变量或方法,可以通过代理对象进行赋值

    def greetingClosure = {

        greeting = "Setting the greeting from a closure"

        printGreeting()

    }

    // greetingClosure() // This doesn't work, because `greeting` isn't defined

    greetingClosure.delegate = myGroovyGreeter

    greetingClosure() // This works as `greeting` is a property of the delegate

    更多资料,如下连接

    http://learnxinyminutes.com/docs/groovy/

    http://www.groovy-lang.org/documentation.html

    相关文章

      网友评论

          本文标题:1.3_Groovy 闭包和对象

          本文链接:https://www.haomeiwen.com/subject/aasvwxtx.html