2011-08-05 85 views
2

我有一個Groovy DSL這樣的腳本:使用括號的Groovy DSL?

entity(attribute1:"one", attribute2:"two") 

到目前爲止好。我運行腳本並將腳本的委託設置爲實體定義的類,並且該類處理所有內容。

現在,我想這樣做:

entity(attibute1:(subattribute1:"one", subattribute2:"two")) 

這是莫名其妙語法可能嗎?由於(subattribute1:「one」,subattribute2:「two」)本身並不意味着什麼,我假設沒有,儘管我想知道是否有一些我不知道的Groovy魔法允許這樣做。

而且我不希望做

entity(attibute1:[subattribute1:"one", subattribute2:"two"]) 

即使我知道這工作。只是一個語法首選項。

回答

2

不,你必須使用方括號(如你所說你不想要)。

第一個例子:

entity(attribute1:"one", attribute2:"two") 

是實際調用快捷方式:

entity([ attribute1:"one", attribute2:"two" ]) 

所以,你要麼需要在方括號,(以表示attribute1鍵包含地圖,或您需要在另一個方法名稱前加上大括號,例如:

entity(attibute1:attribute(subattribute1:"one", subattribute2:"two")) 
+0

是的我試圖避免這種情況o ...哦,謝謝,雖然! – user872831

+0

不用擔心,有時你不得不向解析器屈服:-((或者至少給它提示你正在嘗試做什麼):-)祝你好運! –