go语言包管理(Groovy闭包深入学习 [203] 一直都有新高度 ITeye技术网站)
导读:闭包...
闭包
defone={num1,num2->
println"paramis:$num1&$num2"
}
one(2,3)//简便写法 。输出paramis:2&3
one2,3//省略()的等效写法
one.call(2,3)//使用call方法
one.call2,3//省略()等效写法
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 // 省略()等效写法
defmakeClosure(name){
return{
println"Hello${name}"
}
}
printlnmakeClosure(‘World’)//请问输出结果?
def makeClosure(name) {
return {
println "Hello ${name}"
}
}
println makeClosure(‘World’) // 请问输出结果?
defrun(closure){
closure.call()
}
one={printlnHello,World!}
run(one)
def run(closure) {
closure.call()
}
one = { println Hello, World! }
run(one)
classOneClosure{
defstaticexecute(closure){
defword=Cool//!!!注意不使用def的输出结果 ,理解方式使用引用
closure(Grails)
}
publicstaticvoidmain(args){
defword=Hello
deftwo={param->println"${word}${param}"}
two(Groovy)//输出HelloGroovy
word=Wow
two(Java)//输出WowJava
OneClosure.execute(two)//输出WowGrails ,而不是CoolGrails
}
}
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
}
}
interfaceTest{
defone()
}
deftest={printlnone}asTest
test.one()
interface Test {
def one()
}
def test = {println one} as Test
test.one()
a) 使用关键字as
interfaceTest{
defone()
deftwo()
}
deftest=[
one:{printlnone},
two:{printlntwo}
]asTest
test.one()
test.two()
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为闭包
1. 定义和执行闭包
Java代码
注意:
a) 闭包自身的定义写法 。在参数与具体代码执行端间的分隔符是-> ,老版本的是| b) 使用call方法 ,或简便写法 。 c) 由于groovy可省略() ,而引发的众多等效写法 。 d) 单参数 ,可省略书写参数 ,在闭包内使用it变量引用参数 。2. 闭包作为参数返回
Java代码
3. 闭包作为参数传递
Java代码
4. 闭包使用外部变量
Java代码
注意:
a) 闭包可使用(引用)闭包外部定义的变量 b) 变量的定义必须在闭包的上面 ,否则有groovy.lang.MissingPropertyException异常 。 c) 注意在代码标记出 ,如果不使用def的输出差异 。具体解释可使用引用来理解 。在一个闭包被定义后 ,使用的是闭包定义所在的外部对象,对于使用的外部对象的引用一直都不会改变(无论是否被作为参数传递) 。5. 使用闭包实现单方法接口
Java代码
6. 使用闭包实现多方法接口
Java代码
分享到:
声明:本站所有文章 ,如无特殊说明或标注 ,均为本站原创发布 。任何个人或组织,在未征得本站同意时 ,禁止复制 、盗用 、采集 、发布本站内容到任何网站 、书籍等各类媒体平台 。如若本站内容侵犯了原著者的合法权益 ,可联系我们进行处理。
创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!