`
JohnnyJian
  • 浏览: 106047 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Groovy学习笔记——在Groovy中调用Groovy脚本

阅读更多
之前Evan在http://www.chinagroovy.org/forum/index.php?topic=291.0中问了关于如何调用一个外部的Groovy脚本中的闭包的问题,实际上这并不复杂,要比Java调用Groovy的方法简单。
譬如我们有这样的脚本:
// com/test/SomeScript.groovy
package com.test

println a
b = a * 2
c = { -> println a * 3 }

我们可以这样子调用这个脚本(不需要把SomeScript.groovy编译为class文件,当然编译也是可以的):
// TestImportScript.groovy
import com.test.SomeScript

def s = new SomeScript()
s.binding.a = 1
s.run()
println s.binding.b
s.binding.c.run() // 不能写为s.binding.c(),这样会把c当作binding的方法

// 或者可以更简单
s.a = 2
s.run()
println s.b
s.c()

输出为:
1
2
3
2
4
6

以上代码在Groovy 1.5.6下测试通过。
分享到:
评论
5 楼 JohnnyJian 2011-02-11  
joeytang 写道
c = { -> println a * 3 } 
这个是什么意思啊。

我在TestImportScript.groovy 文件里面这样写
def cc = 1..3
cc.each{  ->
    println "cc"
}

为什么不行呢。在->之前必须要一个变量或者把->号去掉都可以通过,就是这种写法不能通过,请问为什么啊。谢谢。


{ -> ... } 表示的是这个闭包没有参数,但是each后面跟着的闭包应该是有一个参数的,所以应该写成 (1..3).each { i -> println i }

至于不写->能通过,是因为Groovy会默认给没有写->的闭包添加一个隐藏的it参数,所以上面的闭包也可以写作 (1..3).each { println it }
4 楼 joeytang 2011-02-11  
c = { -> println a * 3 } 
这个是什么意思啊。

我在TestImportScript.groovy 文件里面这样写
def cc = 1..3
cc.each{  ->
    println "cc"
}

为什么不行呢。在->之前必须要一个变量或者把->号去掉都可以通过,就是这种写法不能通过,请问为什么啊。谢谢。
3 楼 JohnnyJian 2009-05-05  
key232323 写道

第一文件要编译吗??为什么import总报错??

文件名一定要对,com/test/SomeScript.groovy(相对于TestImportScript.groovy),而且不能用GroovyConsole运行(除非把TestImportScript.groovy所在的目录加到classpath),要用命令行
2 楼 key232323 2009-05-05  
第一文件要编译吗??
为什么import总报错??
1 楼 RayChase 2008-10-27  
直接def s = new SomeScript()  有意思

相关推荐

    Groovy学习笔记 PDF版

    在《Groovy学习笔记》这本书中,你可能会学到如何快速入门Groovy,理解其基本语法,包括变量、控制流、类和对象的创建,以及如何利用Groovy的特性来提高开发效率。此外,书中可能还会涵盖Groovy在实际项目中的应用,...

    Groovy 学习笔记

    **四、Groovy在构建工具中的应用** 1. **Gradle**: Gradle是一个使用Groovy编写的构建自动化工具,它的脚本语言为Groovy,提供强大的依赖管理和插件系统。 2. **Ant with Groovy**: Groovy可以作为Ant任务的语言,...

    Groovy学习笔记.pdf

    Groovy是一种动态、灵活的编程语言,它是Java平台上的一个主要补充,特别是在脚本编写和快速原型设计方面表现突出。...这份"Groovy学习笔记.pdf"应该会提供一个良好的起点,帮助你踏上Groovy的学习之旅。

    groovy学习笔记

    以下是对Groovy学习笔记各章节的详细解释: ### 第1章:数字和字符串 在Groovy中,所有的数字都是Object类型的,这意味着你可以在对象上调用方法。例如,你可以直接在数字上使用加减乘除等运算符,如`12 + 8`。...

    Groovy学习笔记

    ### Groovy学习笔记知识点梳理 #### 一、Groovy简介 - **概念**:Groovy是一种灵活的脚本语言,其设计初衷是为了更好地服务于Java开发者。它具备许多现代动态语言的特点,比如Python和Ruby,同时又能够无缝地与Java...

    Groovy语法&Gradle配置学习笔记

    Groovy是一种基于Java平台的动态编程语言,它在设计时考虑了简洁性和可读性,使得开发者能够更高效地编写脚本和构建工具。Groovy语法借鉴了多种语言的特性,如Python、Ruby和Java,这使得Java开发人员能够轻松上手。...

    Groovy-chenyun2000-mht.rar

    在提供的压缩包"Groovy-chenyun2000-mht.rar"中,我们可以期待找到一系列关于Groovy和Grails的学习资料。Grails是基于Groovy的开源Web应用框架,它采用敏捷开发方法,让开发者能够快速构建复杂的Web应用程序。Grails...

    gradle学习笔记1

    **Gradle 学习笔记** Gradle 是一种高级的构建工具,它与 Maven 类似,主要负责管理和自动化软件项目的构建过程,包括管理依赖、编译、打包和部署等任务。然而,Gradle 提供了比 Maven 更高的灵活性,因为它的构建...

    JDK 6 java 学习笔记的代码

    ` 这样的操作在JDK 6中可以直接执行,无需手动调用`Integer.valueOf()`或`intValue()`方法。 2. **枚举类型(Enum)的增强**:在JDK 6中,枚举类型被赋予了更多的功能,如可以拥有方法和字段,可以实现接口,甚至...

    grails学习笔记

    《Grails学习笔记:监听器与环境配置》 在Grails框架中,监听器和环境配置是提升开发效率的关键元素。监听器允许开发者在特定事件发生时执行自定义操作,而环境配置则确保了不同环境下应用的正确运行。本文将深入...

    Java JDK 7学习笔记 完整扫描版

    - 新的`invokedynamic`指令,为运行时绑定方法调用提供了支持,增强了Java与脚本语言的交互,比如Groovy和JavaScript。 10. **弃用和改进的API** - JDK 7中,一些过时的API被标记为废弃,如`FileInputStream`和`...

    林信良的jdk6学习笔记源代码

    《林信良的JDK6学习笔记源代码》是一份珍贵的学习资源,它包含了林信良在其著作《JDK6学习笔记》中所使用的全部源代码。这份源代码集可以帮助读者深入理解书中讲解的Java编程概念和技术,尤其对于正在学习JDK6版本的...

    btrace-sr:BTrace 实战学习笔记,其号称“线上问题追踪神器”

    BTrace 提供了一种脚本语言,这种语言基于Groovy,使得开发者能够编写简单的脚本来定义想要监控的行为。例如,你可以编写一个脚本来记录特定方法的调用时间,或者跟踪某个对象的生命周期。 在实战学习BTrace时,你...

    Spring_Note.zip

    这个"Spring_Note.zip"文件很可能包含了一系列关于Spring框架的学习笔记或者教程资料,特别是聚焦于Spring 3版本的知识点。Spring 3是Spring框架的一个重要版本,它引入了许多新特性并优化了现有功能,使得开发者能...

    scala的操作笔记

    - **高效的执行性能**:尽管Scala是一种解释型语言,但由于它是在JVM上运行的,因此其执行效率往往高于其他动态类型的脚本语言如Ruby或Groovy。 - **Hadoop生态系统中的地位**:随着大数据处理的需求日益增长,...

    jenkins-course:这是Jenkins关于Udemy培训的所有资源的资源库

    **Groovy在Jenkins中的应用** Groovy是一种动态类型的Java方言,被广泛用于Jenkins Pipeline的编写。它提供了简洁的语法,使得编写复杂的自动化流程变得简单。Groovy还可以直接调用Jenkins API,为定制功能提供了极...

    Android Studio3.0.1填坑笔记

    为了解决这个问题,你需要确保在升级数据库版本时,包含正确的数据库升级脚本,并调用`SugarContext.init()`方法在应用启动时初始化Sugar ORM。同时,确保在数据库版本号上做了适当的递增,以触发升级过程。 总之,...

    java7源码-all_blogs::glowing_star:博文存放处,麻烦点个星~:glowing_star:

    在深入学习Java 7源码的过程中,可以结合博客中的"JAVA笔记系列目录"和"数据结构和算法系列目录"来逐步理解各个知识点。这些博客可能涵盖了基础语法、核心类库的实现原理、数据结构与算法在Java中的应用等多个方面,...

Global site tag (gtag.js) - Google Analytics