`
ihuashao
  • 浏览: 4663556 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

Groovy探索之闭包 四

阅读更多
Groovy探索之闭包 四
前面我都有数次提到过,说闭包较之于方法或者内部类都显得格外的灵活,前面的《Groovy探索之闭包》也都是围绕着闭包灵活的这一特性来阐述的。今天将要提到的是闭包灵活性的另外一个方面——curry方法。
为什么说闭包的curry方法是闭包灵活性的又一个方面,我不想泛泛而谈,下面还是从几个例子说起。
假设我们有一个方法来计算成方:
defstatic cal(int x,int y)
{
return x**y
}
现在,我们要对如下的数组做平方运算:
int[] nums = [1,2,3,6,8] asint[]
对于Java语言的解决方案是增加一个计算平方的方法,如下:
defstatic sqr(int x)
{
cal(x,2)
}
则上述的数组可以做如下的运算:
nums.each{
println sqr(it)
}
这段代码再往下,我们要对下面的数组做立方运算:
int[] num1s = [1,5,4,6,7] asint[]
则我们又要增加一个计算立方的方法:
defstatic cube(int x)
{
cal(x,3)
}
可以看到,由于需求的增加,我们要不断的增加方法来满足新的需求。这种情况,不论是对于公用代码的提供者,还是公用代码的使用者,都是相当麻烦的。
如果使用闭包来解决这个问题,则公用代码的提供者只需要提供一个方法,即:
defstatic cal = {
int x,int y ->
y**x
}
而客户端在使用这个闭包,就成了下面的样子:
def sqr = cal.curry(2)
int[] nums = [1,2,3,6,8] asint[]
nums.each{
println sqr(it)
}
println'--------------------------'
def cube = cal.curry(3)
int[] num1s = [1,5,4,6,7] asint[]
num1s.each{
println cube(it)
}
可以看到,这种对闭包进行curry运算的解决方案,的确是要比上面的解决方案简单一些,而且更加方便和灵活得多。
上面的代码的运行结果为:
1
4
9
36
64
--------------------------
1
125
64
216
343
经过了上面的介绍,你可能会说,闭包的curry方法非常方便,我喜欢使用它。但是,我也有问题,就是遗留的Java语言工具类,我可以使用闭包的curry方法吗?
当然可以,我们还是来看看实际的例子吧。
下面是我们的Java类:
publicclass Tools {
publicstaticint cal(int x,int y)
{
return (int)Math.pow(x, y);
}
}
现在我们在Groovy语言中使用它:
def cal = Tools.&cal;
def sqr = cal.curry(2)
int[] nums = [1,2,3,6,8] asint[]
nums.each{
println sqr(it)
}
println'--------------------------'
def cube = cal.curry(3)
int[] num1s = [1,5,4,6,7] asint[]
num1s.each{
println cube(it)
}
使的,在Groovy语言中,“.&”运算符就可以将一个方法转变为一个闭包,如上面的:
def cal = Tools.&cal;
然后,我们就可以对cal对象进行闭包的任何操作。
分享到:
评论

相关推荐

    Groovy入门经典.pdf

    6. **Grails框架**:如果对Web开发感兴趣,Groovy的Grails框架是值得探索的。它是一个基于Groovy的全栈框架,提供MVC架构,用于快速构建Web应用。 7. ** Grape**:Grape是Groovy自带的依赖管理系统,类似于Java的...

    实战groovy.rar

    进一步探索Groovy的高级特性,如Meta Object Protocol (MOP)、GroovyShell、 Grape依赖管理系统等,提升编程技巧。 七、社区资源与工具 积极参与Groovy社区,利用官方文档、Stack Overflow、Groovy Slack等平台获取...

    groovy-sdk-2.4.3.zip

    - **闭包**:Groovy的闭包是其强大的特性之一,它们可以作为函数参数,也可以用作控制结构的一部分,提供了高度的灵活性。 - **动态和静态类型**:Groovy允许在同一个程序中同时使用动态和静态类型,以平衡开发速度...

    Java Groovy

    - **闭包**:Groovy中的闭包类似于其他语言中的匿名函数,但具有更强的灵活性和表达能力。它们可以作为参数传递给方法,也可以作为返回值从方法中返回。 - **元编程**:Groovy提供了一系列强大的元编程工具,包括AST...

    groovy_demo

    在"groovy_demo"项目中,我们将会探索Groovy的基础概念和核心特性,这对于初学者来说是一个很好的起点。下面将详细讨论Groovy的相关知识点。 1. **Groovy语法基础**: - **简洁性**:Groovy的语法比Java更为简洁,...

    groovy 经典入门 通俗易懂

    以上内容仅为Groovy入门的基础知识,Groovy还有更多高级特性如AST转换、GroovyShell、 Grape依赖管理等,等待你进一步探索。通过阅读《Groovy经典入门推荐版》PDF,你将能够全面了解这个语言,并迅速上手。

    groovy学习

    例如,Groovy支持闭包,这是一种强大的函数式编程概念,可以简化迭代和函数式操作。 Groovy与Java的互操作性是其一大亮点。由于Groovy代码可以无缝调用Java类库,开发者可以在已有的Java项目中轻松引入Groovy脚本,...

    Groovy学习资料(包括Groovy in action 的中英文以及API)

    总的来说,"Groovy in Action"提供了全面的学习材料,配合API文档,可以帮助开发者迅速掌握Groovy的精髓,并将之应用到实际项目中。通过阅读这本书和实践其中的示例,你将能更好地理解和利用Groovy的强大力量,提升...

    apache-groovy-sdk-3.0.3.zip

    通过这个SDK,你可以充分体验Groovy的强大功能,例如闭包、元编程、动态类型和DSL(领域特定语言)的创建。同时,结合Gradle,你可以在大型项目中构建复杂的构建逻辑,提高开发效率。 总的来说,Apache Groovy SDK ...

    Programming Groovy 2

    4. **函数式编程**:讲解Groovy支持的函数式编程风格,如闭包、集合操作、惰性计算等。 5. **高级主题**:涵盖Groovy 2中的新增特性,例如类型推断、静态类型检查等,以及如何使用Groovy构建领域特定语言(DSL)。 6. ...

    rxjava-groovy-0.7.0.zip

    《RxJava与Groovy结合:探索异步编程新境界》 RxJava,一款基于 Reactive Extensions 概念的库,为Java虚拟机(JVM)提供了一种声明式处理异步数据流的方式。它允许开发者以一种简洁、可读性强的方式来处理事件和...

    Groovy入门]第二讲.完成文本界面的程序框架

    Groovy是一种动态、灵活的编程语言,它在Java平台上运行,并与Java代码完全兼容。...通过学习和实践,你可以掌握使用Groovy开发简单交互式程序的技能,为进一步探索Groovy的高级特性和应用打下坚实的基础。

    Groovy in action

    - **第5章:闭包的工作原理**:深入分析了Groovy中的闭包(Closures),这是Groovy的一个关键特性,闭包使得编写简洁而强大的代码成为可能。 - **第6章:Groovy控制结构**:讨论了各种控制流程语句,如循环、条件判断...

    Groovy安装、语法和事例文件

    2. **闭包**: Groovy中的闭包类似于函数引用,可以作为参数传递,增强了代码的可读性和灵活性。 3. **方法调用简写**: 可以使用`.`或`[]`来调用对象的方法,如`object.method()`或`object['method']()`。 4. **...

    groovy入门经典

    3. **闭包**:Groovy中的闭包是其强大的特性之一,它可以被用作函数、数据结构和控制结构,类似于JavaScript的箭头函数。 4. **GString**:Groovy的GString(Groovy String)允许在字符串中嵌入表达式,使得字符串...

    groovy-binary-1.8.0.zip

    - **闭包增强**:Groovy的闭包(Closure)是其强大特性之一,1.8.0可能对闭包的语法和行为进行了优化,使其更接近Java 8的Lambda表达式。 - **GDK增强**:Groovy的Default Groovy Methods (GDK) 是Groovy语言的一...

    groovy in action.pdf

    《Groovy in Action》这本书由Dierk König与Andrew Glover、Paul King、Guillaume Laforge以及Jon Skeet共同编写,是一本深入探索Groovy编程语言的权威指南。本书由Manning Publications出版,全面覆盖了Groovy语言...

Global site tag (gtag.js) - Google Analytics