【Groovy】闭包 Closure ( 闭包参数绑定 | curry 函数 | rcurry 函数 | ncurry 函数 | 代码示例 )(二)

简介: 【Groovy】闭包 Closure ( 闭包参数绑定 | curry 函数 | rcurry 函数 | ncurry 函数 | 代码示例 )(二)

3、闭包参数绑定 ncurry 函数


从第 n nn 个参数开始绑定闭包中的参数 ;


注意调用了 curry / ncurry / rcurry 方法后 , 所有的默认值都被覆盖清除了 , 如果 从第 2 22 个参数开始绑定闭包参数 , 则此时第一个参数也没有默认值了 , 调用时 , 必须传入第一个参数只才可以 , 否则运行时会报错 ;



闭包参数绑定 ncurry 函数原型 :


 

/**
     * 从给定的索引处开始绑定闭包参数
     *
     * @param argument 要绑定参数的闭包
     * @return the 绑定参数后新创建的闭包
     * @see #ncurry(int, Object...)
     */
    public Closure<V> ncurry(int n, final Object argument) {
        return ncurry(n, new Object[]{argument});
    }



代码示例 :


     

// 定义闭包变量 , 声明两个参数 a, b
        // 并为闭包指定默认值
        def closure5 = { a = 0, b = "Groovy" ->
            println "${a} : ${b}"
        }
        // 闭包有默认值 , 调用时可以不传入参数
        closure5()
        // 从第 n 个参数开始绑定闭包参数 ,
        // 注意调用了 curry / ncurry / rcurry 方法后 , 之前的默认值就覆盖了
        // 此时第一个参数没有值了
        // 调用时 , 必须传入第一个参数只才可以
        def closure8 =closure5.ncurry(1, "Kotlin")
        // 闭包的第一个默认值被取消 , 此时必须传入第一个参数的值才能执行该闭包
        // 否则报错
        closure8(3)



执行结果 :


0 : Groovy
3 : Kotlin





二、完整代码示例


完整代码示例 :


import org.codehaus.groovy.ant.Groovy
class Test {
    static void main(args) {
        // I. 接收默认一个参数的变薄
        // 定义闭包变量
        def closure = {
            println "Accept One Arguments : ${it}"
        }
        // 调用闭包
        closure.call("Hello");
        closure("Hello");
        // II. 不接收任何参数的闭包
        // 定义闭包变量 , 不允许传入参数
        def closure2 = { ->
            println "Not Accept Arguments"
        }
        // 传入参数会报错
        //closure2("Hello")
        // 调用闭包 , 不能传入参数
        closure2.call();
        closure2();
        // III. 接收一个自定义参数的闭包
        // 定义闭包变量 , 声明一个参数 a
        def closure3 = { a ->
            println "${a}"
        }
        // 调用闭包 , 不能传入参数
        closure3.call(1);
        closure3(2);
        // IV. 接收两个自定义参数的闭包
        // 定义闭包变量 , 声明两个参数 a, b
        // 在闭包中打印这两个参数
        def closure4 = { a, b ->
            println "${a} : ${b}"
        }
        // 调用闭包 , 不能传入参数
        closure4.call(1, 2);
        closure4(3, 4);
        // V. 为闭包参数指定默认值
        // 定义闭包变量 , 声明两个参数 a, b
        // 并为闭包指定默认值
        def closure5 = { a = 0, b = "Groovy" ->
            println "${a} : ${b}"
        }
        // 闭包有默认值 , 调用时可以不传入参数
        closure5()
        // 从左到右绑定 闭包参数
        def closure6 = closure5.curry(1, "Gradle")
        // 闭包有默认值 , 调用时可以不传入参数
        closure6()
        // 从右到左绑定 闭包参数
        def closure7 =closure5.rcurry(2, "Java")
        // 闭包有默认值 , 调用时可以不传入参数
        closure7()
        // 从第 n 个参数开始绑定闭包参数 ,
        // 注意调用了 curry / ncurry / rcurry 方法后 , 之前的默认值就覆盖了
        // 此时第一个参数没有值了
        // 调用时 , 必须传入第一个参数只才可以
        def closure8 =closure5.ncurry(1, "Kotlin")
        // 闭包的第一个默认值被取消 , 此时必须传入第一个参数的值才能执行该闭包
        // 否则报错
        closure8(3)
    }
}


执行结果 :


Accept One Arguments : Hello
Accept One Arguments : Hello
Not Accept Arguments
Not Accept Arguments
1
2
1 : 2
3 : 4
0 : Groovy
1 : Gradle
2 : Java
3 : Kotlin


image.pngimage.pngimage.pngimage.pngimage.pngimage.pngimage.pngimage.pngimage.pngimage.pngimage.png

image.png

目录
相关文章
|
6月前
|
存储 Python 数据处理
Python 05 之函数【参数,返回值,嵌套调用,作用域,匿名函数】
Python 05 之函数【参数,返回值,嵌套调用,作用域,匿名函数】
74 0
|
6月前
|
缓存 JavaScript 前端开发
|
2月前
|
Python
示例说明闭包函数
示例说明闭包函数
|
4月前
|
自然语言处理 JavaScript 前端开发
理解闭包的定义
【7月更文挑战第10天】闭包是编程中的关键概念,特别是函数式编程中。它是函数及其相关引用环境的组合,能访问词法作用域内外的变量,即使外部函数已执行完毕。闭包提供封装私有变量、保持状态、延迟执行的功能,常用于模块化、函数工厂、模拟私有方法和回调。JavaScript中通过函数嵌套实现闭包,但也可能导致内存泄漏和性能问题。
104 2
|
6月前
|
存储 Rust 程序员
rust中的函数:定义、调用与闭包
本文将深入探讨Rust编程语言中函数的定义、调用方式,以及闭包(closures)的概念和应用。我们将从函数的基本语法出发,逐步深入到函数的参数传递、返回值,再进一步介绍闭包及其捕获环境的能力,帮助读者全面理解并熟练运用Rust中的函数与闭包。
【Groovy】闭包 Closure ( 闭包调用 | 闭包默认参数 it | 代码示例 )
【Groovy】闭包 Closure ( 闭包调用 | 闭包默认参数 it | 代码示例 )
157 0
【Groovy】闭包 Closure ( 闭包调用 | 闭包默认参数 it | 代码示例 )
【Groovy】闭包 Closure ( 闭包作为函数参数 | 代码示例 )
【Groovy】闭包 Closure ( 闭包作为函数参数 | 代码示例 )
174 0
【Groovy】闭包 Closure ( 闭包作为函数参数 | 代码示例 )
【Groovy】闭包 Closure ( 闭包定义 | 闭包类型 | 查看编译后的字节码文件中的闭包类型变量 )
【Groovy】闭包 Closure ( 闭包定义 | 闭包类型 | 查看编译后的字节码文件中的闭包类型变量 )
148 0
【Groovy】闭包 Closure ( 闭包定义 | 闭包类型 | 查看编译后的字节码文件中的闭包类型变量 )
【Groovy】闭包 Closure ( 闭包类 Closure 简介 | 闭包 parameterTypes 和 maximumNumberOfParameters 成员用法 )
【Groovy】闭包 Closure ( 闭包类 Closure 简介 | 闭包 parameterTypes 和 maximumNumberOfParameters 成员用法 )
116 0
【Groovy】闭包 Closure ( 闭包类 Closure 简介 | 闭包 parameterTypes 和 maximumNumberOfParameters 成员用法 )
【Groovy】闭包 Closure ( 自定义闭包参数 | 自定义单个闭包参数 | 自定义多个闭包参数 | 闭包参数默认值指定 )
【Groovy】闭包 Closure ( 自定义闭包参数 | 自定义单个闭包参数 | 自定义多个闭包参数 | 闭包参数默认值指定 )
236 0
【Groovy】闭包 Closure ( 自定义闭包参数 | 自定义单个闭包参数 | 自定义多个闭包参数 | 闭包参数默认值指定 )