首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >带可选参数的Groovy闭包

带可选参数的Groovy闭包
EN

Stack Overflow用户
提问于 2012-09-25 09:41:14
回答 3查看 12.6K关注 0票数 24

我想定义一个带有一个参数的闭包(我用it引用这个参数),有时我想向闭包传递另一个额外的参数。我该怎么做呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-09-25 09:54:31

您可以将第二个参数设置为默认值(如null):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def cl = { a, b=null ->
  if( b != null ) {
    print "Passed $b then "
  }
  println "Called with $a"
}

cl( 'Tim' )          // prints 'Called with Tim'
cl( 'Tim', 'Yates' ) // prints 'Passed Yates then Called with Tim

另一种选择是使b成为一个变量列表,如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def cl = { a, ...b ->
  if( b ) {
    print "Passed $b then "
  }
  println "Called with $a"
}

cl( 'Tim' )                    // prints 'Called with Tim'
cl( 'Tim', 'Yates' )           // prints 'Passed [Yates] then Called with Tim
cl( 'Tim', 'Yates', 'Groovy' ) // prints 'Passed [Yates, Groovy] then Called with Tim
票数 42
EN

Stack Overflow用户

发布于 2016-05-19 06:58:06

希望这能帮助

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
​def clr = {...a ->  
    print "Passed $a then "
    enter code here

}

​clr('Sagar')
clr('Sagar','Rahul')
票数 3
EN

Stack Overflow用户

发布于 2018-04-06 08:25:57

的变体不能与@TypeChecked (在类上下文中)一起工作,至少在Groovy 2.4.11中不能工作,在Groovy 2.4.11中,默认参数被忽略,并且不编译 :-(

因此,在这种情况下可以工作的其他(诚然更丑陋的)解决方案是:

closure first似乎工作得很好(对于递归来说无论如何都是必要的):

  1. declaring first

def cl ={ ... }

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
- at least in Eclipse Neon / Groovy-Eclipse Plugin 2.9.2 the code completion/suggestions do not work either way using the closure later on in the same code block => so nothing lost as far as I can say

带有@TypeChecked(value=TypeCheckingMode.SKIP)

  1. 它对这两种方法都有效,但是您会放松对方法(或类,取决于您放置它的位置)的类型检查
  2. 声明闭包委托 cl2

@TypeChecked class Foo { static main( String[] args ){ def cl ={ a,b -> if( b != null ) print“传递了$b然后”println“用$a调用”} def cl2 ={a -> cl( a,null )} cl2( 'Tim‘) //打印’用Tim‘cl( 'Tim',' Yates‘) //打印’传递的Yates然后用Tim调用}}

  • 闭包转换为类方法,例如

@TypeChecked class Foo { cl( a,b=null ){ if( b != null ) print“通过$b然后”println“用$a调用”} static main( String[] args ){ cl( ' Tim‘) //用Tim’cl( 'Tim',' Yates‘) //打印’通过Yates然后用Tim调用} }

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12580262

复制
相关文章
【Groovy】闭包 Closure ( 闭包调用 | 闭包默认参数 it | 代码示例 )
在 closure() 调用时 , 传入一个参数 , 会自动赋值给闭包中的 it 变量 ;
韩曙亮
2023/03/30
7150
【Groovy】闭包 Closure ( 闭包调用 | 闭包默认参数 it | 代码示例 )
【Groovy】闭包 Closure ( 闭包作为函数参数 | 代码示例 )
文章目录 一、闭包作为函数参数 二、闭包作为函数参数代码示例 一、闭包作为函数参数 声明一个 fun 函数 , 可以 将参数声明为 Closure<?> 闭包类型 , 在该函数中 , 执行闭包内容 ;
韩曙亮
2023/03/30
5450
【Groovy】闭包 Closure ( 闭包作为函数参数 | 代码示例 )
Groovy 闭包
本文介绍了Groovy闭包的有关内容。闭包可以说是Groovy中最重要的功能了。如果没有闭包,那么Groovy除了语法比Java简单点之外,没有任何优势。但是闭包,让Groovy这门语言具有了强大的功能。如果你希望构建自己的领域描述语言(DSL),Groovy是一个很好的选择。Gradle就是一个非常成功的例子。
乐百川
2022/05/05
7750
【Groovy】闭包 Closure ( 自定义闭包参数 | 自定义单个闭包参数 | 自定义多个闭包参数 | 闭包参数默认值指定 )
为闭包指定参数列表 , 需要在闭包 开始位置使用 " -> " 符号 , 在该符号的左侧指定参数列表 ;
韩曙亮
2023/03/30
2.5K0
【Groovy】闭包 Closure ( 自定义闭包参数 | 自定义单个闭包参数 | 自定义多个闭包参数 | 闭包参数默认值指定 )
Groovy中的闭包
今天分享一下Groovy的闭包。基本上,我们可以将闭包视为代码,语句块,它们可以访问周围范围的所有变量或方法,并且可以将这些代码块分配给变量,并将它们传递到其他地方。
FunTester
2020/05/04
1.6K0
【Groovy】闭包 Closure ( 闭包参数绑定 | curry 函数 | rcurry 函数 | ncurry 函数 | 代码示例 )
闭包 Closure 提供了 curry , ncurry , rcurry 方法 , 这
韩曙亮
2023/03/30
1K0
【Groovy】闭包 Closure ( 闭包参数绑定 | curry 函数 | rcurry 函数 | ncurry 函数 | 代码示例 )
【Groovy】闭包 Closure ( 闭包参数列表规则 | 默认参数列表 | 不接收参数 | 接收自定义参数 )
如果只使用了 " -> " 符号 , 没有定义参数列表 , 仍然向闭包中传入参数的话 , 在运行时会报错 , 参考 【错误记录】Groovy 运行报错 ( Exception in thread “main“ groovy.lang.MissingMethodException: No signature of ) 博客 ;
韩曙亮
2023/03/30
8220
【Groovy】闭包 Closure ( 闭包参数列表规则 | 默认参数列表 | 不接收参数 | 接收自定义参数 )
Groovy-10.闭包
闭包是一个短的匿名代码块,它表示一个函数,读取其他函数内部变量。 Groovy 用大括号定义闭包 class Example { static void main(String[] args) { def clos = {println "Hello World"}; clos.call(); } } 闭包中的形参 闭包可以在定义闭包时引用变量,可以接受变量和参数: class Example { static void main(String[] ar
悠扬前奏
2019/06/02
3990
【Groovy】闭包 Closure ( 闭包定义 | 闭包类型 | 查看编译后的字节码文件中的闭包类型变量 )
闭包 Closure 是 Groovy 中最常用的特性 , 使用闭包作为参数是 Groovy 语言的明显特征 ;
韩曙亮
2023/03/30
2.4K0
【Groovy】闭包 Closure ( 闭包定义 | 闭包类型 | 查看编译后的字节码文件中的闭包类型变量 )
【Groovy】闭包 Closure ( 闭包类 Closure 简介 | this、owner、delegate 成员区别 | 静态闭包变量 | 闭包中定义闭包 )
在闭包中 , 打印 this , owner , delegate , 打印结果都是创建闭包时所在的类 ;
韩曙亮
2023/03/30
7930
【Groovy】闭包 Closure ( 闭包类 Closure 简介 | this、owner、delegate 成员区别 | 静态闭包变量 | 闭包中定义闭包 )
【Groovy】闭包 Closure ( 闭包类 Closure 简介 | 闭包 parameterTypes 和 maximumNumberOfParameters 成员用法 )
闭包是 Closure 对象 , Closure 类中有很多成员 , 以及封装的函数 , 下面是 Closure 类的继承结构 ;
韩曙亮
2023/03/30
1K0
【Groovy】闭包 Closure ( 闭包类 Closure 简介 | 闭包 parameterTypes 和 maximumNumberOfParameters 成员用法 )
【Groovy】闭包 Closure ( 闭包中调用 Groovy 脚本中的方法 | owner 与 delegate 区别 | 闭包中调用对象中的方法 )
在 Groovy 脚本中 , 在 Closure 闭包中 , 可以直接调用 Groovy 脚本中定义的方法 ;
韩曙亮
2023/03/30
3.1K0
Groovy 基本类型与闭包
在根工程下自定义config.gradle可以直接在根project引用apply from:'config.gradle' 如果需要在app project中引用,需要加rootProject,表明当前gradle路径在根工程下,apply from: this.rootProject.file('releaseinfo.gradle')
Yif
2019/12/26
6200
混合Java函数和Groovy闭包
之前分享过Groovy中的闭包,在我日常的工作中,就会想到一个问题:“如何在Groovy中使用Java方法?”
FunTester
2020/05/01
1K0
26. Groovy 闭包-语法与参数学习-第一篇
本篇内容为Groovy学习笔记第26篇。相关知识为Groovy中的闭包使用。Groovy中的闭包是一个开放的、匿名的代码块,它可以接受参数、返回值并被分配给变量。闭包可以引用在其周围作用域中声明的变量。与闭包的正式定义相反,Groovy语言中的闭包还可以包含在其周围作用域之外定义的自由变量。虽然打破了闭包的正式概念,但它提供了本章所述的各种优点。
zinyan.com
2023/02/23
9880
26. Groovy 闭包-语法与参数学习-第一篇
【Groovy】Groovy 方法调用 ( Java 中函数参数是接口类型 | 函数参数是接口类型 可以 直接传递闭包 )
个方法 , 那么可以直接向 setOnClickListener 方法中传递一个闭包 , 该闭包相当于 OnClickListener 接口中的 onClick 方法 ;
韩曙亮
2023/03/30
4.7K0
【Groovy】Groovy 方法调用 ( Java 中函数参数是接口类型 | 函数参数是接口类型 可以 直接传递闭包 )
【Swift4】(6) 闭包 | 闭包应用 | 闭包作为函数参数 | 捕获特性
前端修罗场
2023/10/07
1930
【Groovy】闭包 Closure ( 闭包类 Closure 简介 | this、owner、delegate 成员赋值及源码分析 )
在闭包中 , 打印 this , owner , delegate , 打印结果都是闭包所在的类 ;
韩曙亮
2023/03/30
7320
【Groovy】闭包 Closure ( 闭包类 Closure 简介 | this、owner、delegate 成员赋值及源码分析 )
[Android Gradle] 搞定Groovy闭包这一篇就够了
做Android开发的同学,对Gradle肯定不陌生,我们用它配置、构建工程,可能还会开发插件来促进我们的开发,我们必须了解Gradle,而不仅限于只会当配置构建工具,我想学习它,于是就有了这一系列的文章。
Android技术干货分享
2019/03/27
1.4K0
[Android Gradle] 搞定Groovy闭包这一篇就够了
Gradle基础知识-Wrapper,Daeman;Groovy闭包语法
输入gradle wrapper命令会在当前目录创建安装一个jar包(用于下载真正的gradle descirbe,jar很小)和脚本:
北洋
2022/09/23
6670

相似问题

带委托和动态参数的Groovy闭包

18

groovy闭包参数

24

带闭包的Groovy反射

10

Groovy闭包和参数

11

Groovy findAll闭包参数

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文