2011年11月29日

Groovy 的 inspect() 及 Eval.me() 應用

在 Groovy console 中, 我們常測試物件的 API,例如:
def m = [a:"A", b:"B"] 
println m
而 Map 物件 m 會呈現(display):
    [a:A, b:B]
因為預設情形下是使用 toString() method。 然而有一種情形,要試著將這樣子的 String 內容轉回 Map 物件,那勢必得先讓這個 String 呈現為:
    [a:"A", b:"B"]
    ["a":"A", "b":"B"]
這時 inspect() method 就派上用場了:
println m.inspect()
它會呈現:
    ["a":"A", "b":"B"]
只要使用 Eval.me(),就可以再創造出 Map 物件了。再如下例:
Eval.me(MyEnum.ordinals().collect{"${it}:'${MyEnum.salvage(it)}'"}.inspect())

不過,這裡 Map 中 key 及 value 的型別是 String (未用引號或使用單引號) 而不是 GString。