Groovy 之 Closure
来源:互联网 发布:尼尔森数据分析 编辑:程序博客网 时间:2024/05/15 01:57
给它的定义:
Closures are anonymous blocks of code that can accept parameters and can return a value. They can be assigned to variables and can be passed as parameters to methods.
匿名代码块;
可向它传入参数;
可被赋给变量;
自身可作为参数传递到方法中;
Closure square = { it * it}square 16
简单的Closure:
def myClosure = { println 'Hello world!' }//execute our closuremyClosure()
接受一个参数的Closure:
def myClosure = {String str -> println str }//execute our closuremyClosure('Hello world!')
一个参数时,在闭包内可以用it代替
def myClosure = {println it }//execute our closuremyClosure('Hello world!')
接受多个参数
def myClosure = {String str, int num -> println "$str : $num" }//execute our closuremyClosure('my string', 21)
参数类型是可选的,上面的还可以写成这样
def myClosure = {str, num -> println "$str : $num" }//execute our closuremyClosure('my string', 21)
闭包可以引用创建它的上下文中的变量
def myVar = 'Hello World!'def myClosure = {println myVar}myClosure()
闭包的上下文Context可利用setDelegate()来切换
这个概念在后面会变的非常有用。
def myClosure = {println myVar} MyClass m = new MyClass()myClosure.setDelegate(m)myClosure()class MyClass { def myVar = 'Hello from MyClass!'}
在创建myClosure之时,myVar是不存在的,但在执行myClosure之前,将myClosure的context改变为MyClass
传递Closure参数
下面是方法中传递Closure参数的多重写法
接受一个参数
myMethod(myClosure)
如果只有一个参数,括号可省略
myMethod myClosure
in-line内联形式
myMethod {println 'Hello World'}
两个参数
myMethod(arg1, myClosure)
第二个参数为in-line形式
myMethod(arg1, { println 'Hello World' })
如果方法最后一个参数是闭包,那么可将其移出来
myMethod(arg1) { println 'Hello World' }
0 0
- Groovy 之 Closure
- groovy之closure
- Groovy Closure简介
- New Groovy --- Closure/Block问题
- Groovy中closure的delegate
- Groovy解惑——closure中的delegate
- Groovy解惑——closure中的owner
- Groovy中Closure的this到底指向谁?
- Groovy基础——Closure(闭包)详解
- Groovy基础——Closure(闭包)详解
- Groovy基础——Closure(闭包)详解
- Groovy基础——Closure(闭包)详解
- Groovy基础——Closure(闭包)详解
- javascript 之 Closure
- javascript必知必会之closure
- javascript必知必会之closure
- PHP7之Closure::call()
- 闭包之Closure
- Java提高之优化篇(待完成)
- hashMap实现原理
- POJ 2452 Sticks Problem(RMQ+二分)
- SQLserver SSIS的问题 Integration Services项目 ETL 无法保存包的问题
- redis 消息订阅和发布
- Groovy 之 Closure
- Light oj1138 - Trailing Zeroes (III)
- java中串的内存表示
- LEETCODE 226
- Map集合中value()与keySet()、entrySet()区别
- 如何让程序在Nexus上全屏显示
- HDOJ-----3635带权并查集
- IOS学习笔记 ——生命周期
- HDU 3172 Virtual Friends(带权并查集)