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}()" 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM