groovy脚本 groovy( 二 )


Groovy这门语言有哪些具体项目使用场景? - 徐明明的回答 - 知乎 Groovy这门语言有哪些具体项目使用场景? - 徐明明的回答 - 知乎
我们正在做的一个项目用到了,这是一个机器学习的平台,平台里面可以接入各种机器学习的算法,目前已经支持30来种算法 。每个算法有各种各样的参数,为了提高用户友好性,让用户使用起来更方便,用户在页面上“填入”,“选择”的参数值跟我们实际提交到集群执行的参数往往不一样,比如:用户选择一个算法的输入表table1,而实际上我们提交给后台集群的时候需要加上当前project的名字(假如是project1):project1.table1 。
又比如有些算法参数是不需要用户输入的,比如一个算法的输出表,具体的表名用户其实不关心,他只想我们把最后的结果告诉他,这时候我们需要给他自动生成输出表名的参数 。
这样就需要一个【“参数转换”】的过程,这些参数转换逻辑虽然不复杂,但是它们有一个重要的特征: 不可枚举。因此我们采用了【Groovy脚本来描述这个转换算法】 。而且我们机器学习平台将来的目标是【允许用户上传自己编写的算法,这个转换逻辑的可配置化就显得更必要了 。】
都是因为我们有一个叫洛笛的牛逼同事
//
groovy的生态中有gradle(安卓在使用), grails. gant, spock, Geb. Griffion 。从生态上已经很全面了 。最近又可以用groovy来开发Android了 。如杨飞所答,有java的地方就可以有groovy 。只是同时java也在进化,类库等以java为主 。不会发生直接替代 。但是groovy的应用也会越来越广泛 。
//
我们用来做规则引擎、流程引擎,可以做动态脚本环境,尤其是那些不需要发布又经常变更的场合
Groovy基本语法官方文档
和Java一样,支持单行(使用 // )、多行( /* */ )和文档注释(使用 /** */ ) 。
UNIX系统支持一种特殊的单行注释叫作 Shebang line,用于指明脚本的运行环境,这样就可以直接在终端中使用 ./xxx.groovy 运行(当然,前提是文件得有可运行的权限),而不用像 groovy xxx.groovy 这样运行:
# 号必须是文件的第一个字符 。
以字母、美元符号 $ 或下划线 _ 开始,不能以数字开始 。以下是可用的标识符:
以下是不可用的标识符:
注意:在点号后,是可以使用关键字作为标识符的:
Groovy在点表达式(dotted expression)后面可以使用引号标识符,比如 persion.name 可以表示为 persion.'name' 或 persion."name"。而引号中可以包含普通标识符中不支持的字符,比如空格、中档线 - 这些:
其实,Groovy支持多种字符串的字面量表达形式,这些都是可以出现在点号后面的:
更方便的是,Groovy中的 GString 支持 插值,也可以用在点号后面的:
在Groovy中字符串有两种类型,一种是Java原生的 java.lang.String ;另一种是 groovy.lang.GString,又叫 插值字符串 (interpolated strings) 。
在Groovy中,使用单引号括住的字符串就是 java.lang.String,不支持插值:
使用三单引号括住字符串支持多行,也是 java.lang.String 实例,在第一个 ’‘’ 起始处加一个反斜杠 \ 可以在新一行开始文本:
如果双引号括住的字符串中没有插值表达式(interpolated expression),那它就是 java.lang.String ;如是有插值表达式,那它就是 groovy.lang.GString :
在Groovy所有的字符串字面量表示中,除了单引号字符串和三单引号字符串,其他形式都支持字符串插值 。字符串插值,也即将占位表达式中的结果最终替换到字符串相应的位置中:
当使用点号表达式时,可以只用 $ 代替 ${} :
插值占位符中还支持闭包,而闭包的一个好处是 惰性求值 (lazy evaluation):
当一个方法的需要一个 java.lang.String 变量,而我们传递的是一个 groovy.lang.GString 实例时,GString 的 toString 方法会被自动调用,看起来像我们可以直接将一个 GString 赋值给一个 String 变量一样 。
注意: GString 与 String 的hashCode是不一样的,即使他们最终结果一样 。所以,在Map中,不应该用 GString 去做元素的Key,而又使用普通的 String 去取值:
类似于三单引号字符串,但支持字符串插值 。
除了使用引号来括住字符串,还可以使用 /。它一般用来定义正则表达式:
这种字符串使用 $/ 开始,使用 /$ 结束,其中的转义字符为 $ :
在Groovy中并没有明确的字符字面量表示形式,我们必须明确指明:
当使用 def 指明整数字面量时,变量的类型会根据数字的大小自动调整:

秒懂生活扩展阅读