Groovy中的GString
在讨论GString之前,我们先讨论一下Groovy里面的String.在Groovy里面String有
println 'test string'
println '''test string'''
println '''test 跨越
行的
string'''
println "test string"
println """test string"""
println """test 跨越
行的
string"""
println "test string"
这几种,注意用三个单引号或者三个双引号括起来的字符串可以换行.上面的例子里面的字符串都是java.lang.String.
接下来讨论GString.只有在单个双引号或者三个双引号的字符串才能是GString(/asdfadf/可以理解为和"""asdfadf"""一样,这种形式也可以多行,且可以是GString),下面是GString的例子:
def a = 6
def b = 2
def c = "+++++${a}+++"//输出:+++++6+++
def d = "test dsf ${ int x = a / b; return }**"//注意!这个不是闭包,这里每次执行都输出test dsf null**
def e = "asdf${-> int bb = 5}fgh"//0个参数的闭包,输出:asdf5fgh
def f = "asdf${w -> int cc = 6; w << "bb" + cc + 77 }fgh"//1个参数的闭包,这个w是Groovy自动为我们传入的StringWriter,输出:asdfbb677fgh
println c
println d
println e
println f
从上面的例子里面可以看出,我们可以完全在${ 与 } 之间写任意的代码,就跟我们在函数里面写代码一样.代码最后一个表达式的值的toString()就是返回的值,如果不返回值,例如上面那个例子用return返回,那么就是null.闭包只有两种形式,一种是无参数,另一种是带一个w参数,这个参数名字可以取任意合法的标识符名不必非得叫w,而且也只能有这一个参数,这个w是Groovy自动为我们传入的StringWriter,我们可以对其操作.用三个双引号替换上面例子的单个双引号是一样的效果.都是GString.
除此之外,还有一种GString,
def person = [name: 'Guillaume', age: 36]
assert "$person.name is $person.age years old" == 'Guillaume is 36 years old'
这种形式只能是类似于$a.b.c的形式, "$number.toString()" 这样将会报错,我们可以理解为Groovy把这个解释为 "${number.toString}()"
Groovy中的GString的更多相关文章
- Groovy中String转换Gstring用于动态插值
知识点是Groovy中的模板引擎 GStringTemplateEngine 第一个例子: def binding = [ firstname : "Grace", lastnam ...
- Groovy中的闭包
Closures(闭包) 本节主要讲groovy中的一个核心语法:closurs,也叫闭包.闭包在groovy中是一个处于代码上下文中的开放的,匿名代码块.它可以访问到其外部的变量或方法. 1. 句法 ...
- Groovy中那些神奇注解之InheritConstructors
上一篇:Groovy中那些神奇注解之ToString 写完ToString,本来想今天就写到这了,突然觉得InheritConstructors注解实在也是个神器,写起来也没多少字,还是写了吧. In ...
- Groovy中那些神奇注解之ToString
继续上一篇:Groovy中那些神奇注解之Memoized 这篇就讲讲@groovy.transform.ToString这个注解,这注解太熟悉了,熟悉到让人一看就知道是干吗的,不就是把Bean转在St ...
- Groovy中那些神奇注解之Memoized
临近年关手头比较闲,去看了一下Groovy的官方文档,才发现原来Groovy中带了那么多的注解,很多注解带来的效果,有时候让人感觉“这不是在变魔法吧”. 个人很喜欢Groovy,写不成Ruby,Gro ...
- groovy中的正则表达式操作符【groovy】
groovy中对于正则表达式的书写进行了简化,同时引入了新的操作符,使得正则表达式使用起来比较方便简单. 对于书写的改进: 比如 assert "\\d" == /\d/ 也就是在 ...
- Groovy中的面向对象
Groovy中的面向对象 前面说到groovy支持脚本和类,前面一节已将简单说了脚本和类之间的关系,这一节主要介绍一下groovy中类的相关知识,即面向对象相关知识. 1.类型 1.1 原始类型 gr ...
- Groovy中each、find跳出循环
在groovy中使用break跳出each或者find的循环会会报错,为什么呢?groovy中each.find方法是一个闭包操作,要想跳出循环要使用 return true,但有几个问题有待研究: ...
- Groovy中的脚本与类
包名 当你在groovy中定义类的时候需要指定包名,这和java中类似不多介绍. 导入 groovy中的导入也跟java类似,有一下五种: 默认导入 groovy默认导入了一下几个包和类: impor ...
随机推荐
- Tire树的学习
Tire树是一种基于空间换时间思想的,应用于字符串处理的数据结构. 题目地址 分析:设DP数组Can[MaxL],Can[i]=1表示第i位可以理解. 当Can[i]==1,对第i+1位进行匹配,若能 ...
- 初识gauge自动化测试框架(二)
看到一些同学对该工具有点一兴趣,那么我将继续介绍Gauge自动化测试工具. Gauge本质上一个BDD(Behavior Driven Development)测试框架.所以,首先你要了解BDD的操作 ...
- IdentityServer4实战 - 与API单项目整合
一.前言 我们在实际使用 IdentityServer4 的时候,可能会在使用 IdentityServer4 项目添加一些API,比如 找回密码.用户注册.修改用户资料等,这些API与Identit ...
- 在后台业务管理系统中使用Autofac实现微信接口的处理
在后台业务管理系统中使用Autofac实现微信接口的处理,我们只需要把相关使用到的DLL放到BIN目录里面即可,通过IOC控制反转方式实现对接口的调用.在实现在业务系统里面,我们本身程序可能已经依赖了 ...
- 01构建第一个SpringBoot工程
第一篇:构建第一个SpringBoot工程 文章指导 学习笔记 学习代码 创建项目 创建工程:Idea-> new Project ->Spring Initializr ->填写g ...
- UnityInspector显示扩展
比如经常在三方插件中看到如下在Inspector中的样式 这种对特别是要做编辑序列化数据脚本操作很友好,但是这个是如何实现呢?比如我们要创建一个保存序列化的npc基本数据,名字(Name),性别(Se ...
- Java使用URL类下载的图片不完整
问题 今天在使用URL类来下载网站中的图片的时候,出现了一个问题:下载的图片不完整,并且每次下载的图片大小也不是都相同,反正就是不完整. 问题代码如下: package cn.ganlixin.tes ...
- 数据库常用的事务隔离级别和原理?&&mysql-Innodb事务隔离级别-repeatable read详解
转载地址:https://baijiahao.baidu.com/s?id=1611918898724887602&wfr=spider&for=pc https://blog.csd ...
- Pod install Error List
1. Error installing Crashlytics while executing pod install [!] Error installing Crashlytics [!] /us ...
- 在access转sql server指定的转换无效
今天继续昨天没解决的问题,还是继续报错数据库中“指定的转换无效”,看着这个错误都有点头大了,啊啊啊啊,因为无法再代码中寻找到具体点,只好在晚上继续查询 最后终于看到一条帖子说在转换的时候可能出现数据冲 ...