zoukankan      html  css  js  c++  java
  • Groovy中的GString

    在讨论GString之前,我们先讨论一下Groovy里面的String.在Groovy里面String有

     1 println 'test string'
     2 println '''test string'''
     3 println '''test 跨越
     4 行的
     5 string'''
     6 println "test string"
     7 println """test string"""
     8 println """test 跨越
     9 行的
    10 string"""
    11 println "test string"

     这几种,注意用三个单引号或者三个双引号括起来的字符串可以换行.上面的例子里面的字符串都是java.lang.String.

    接下来讨论GString.只有在单个双引号或者三个双引号的字符串才能是GString(/asdfadf/可以理解为和"""asdfadf"""一样,这种形式也可以多行,且可以是GString),下面是GString的例子:

     1 def a = 6
     2 def b = 2
     3 def c = "+++++${a}+++"//输出:+++++6+++
     4 def d = "test dsf ${ int x = a / b; return }**"//注意!这个不是闭包,这里每次执行都输出test dsf null**
     5 def e = "asdf${-> int bb = 5}fgh"//0个参数的闭包,输出:asdf5fgh
     6 def f = "asdf${w -> int cc = 6; w << "bb" + cc + 77 }fgh"//1个参数的闭包,这个w是Groovy自动为我们传入的StringWriter,输出:asdfbb677fgh
     7 println c
     8 println d
     9 println e
    10 println f

    从上面的例子里面可以看出,我们可以完全在${ 与 } 之间写任意的代码,就跟我们在函数里面写代码一样.代码最后一个表达式的值的toString()就是返回的值,如果不返回值,例如上面那个例子用return返回,那么就是null.闭包只有两种形式,一种是无参数,另一种是带一个w参数,这个参数名字可以取任意合法的标识符名不必非得叫w,而且也只能有这一个参数,这个w是Groovy自动为我们传入的StringWriter,我们可以对其操作.用三个双引号替换上面例子的单个双引号是一样的效果.都是GString.

    除此之外,还有一种GString,

    1 def person = [name: 'Guillaume', age: 36]
    2 assert "$person.name is $person.age years old" == 'Guillaume is 36 years old'

    这种形式只能是类似于$a.b.c的形式, "$number.toString()" 这样将会报错,我们可以理解为Groovy把这个解释为 "${number.toString}()" 

  • 相关阅读:
    C/C++&java communicate with each other 之 video file-streaming
    C/C++&java communicate with each other 之 video snapshot
    protobuf io 代码阅读
    利用逆波兰表达式,二叉树对sql语句解析
    cocos2d-x 添加sqlite3 时 报 lua_Number 错误
    error LNK2019: 无法解析的外部符号 _acosh,该符号在函数 _acoshFunc 中被引用
    visual studio 运行程序在副显示器上
    lua table 中#,getn,maxn 的区别
    'Cordova/CDVViewController.h' file not found
    [ISSUE]cannot run on the selected destination
  • 原文地址:https://www.cnblogs.com/xxNote/p/10638056.html
Copyright © 2011-2022 走看看