Syntax 使用括号的Groovy DSL?

Syntax 使用括号的Groovy DSL?,syntax,groovy,dsl,parentheses,Syntax,Groovy,Dsl,Parentheses,我有一个groovy DSL脚本,如下所示: entity(attribute1:"one", attribute2:"two") 到目前为止还不错。我运行脚本并将脚本的委托设置为一个定义了实体的类,该类处理所有事情 现在我想这样做: entity(attibute1:(subattribute1:"one", subattribute2:"two")) 这在句法上是可能的吗?因为(subattribute1:“一”,subattribute2:“二”)本身没有任何意义,我假设没有,尽管我想

我有一个groovy DSL脚本,如下所示:

entity(attribute1:"one", attribute2:"two")
到目前为止还不错。我运行脚本并将脚本的委托设置为一个定义了实体的类,该类处理所有事情

现在我想这样做:

entity(attibute1:(subattribute1:"one", subattribute2:"two"))
这在句法上是可能的吗?因为(subattribute1:“一”,subattribute2:“二”)本身没有任何意义,我假设没有,尽管我想知道是否有一些我不知道的Groovy魔法允许这样做

我不想这样做

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

尽管我知道这很有效。只是语法偏好。

不,您必须使用方括号(正如您所说的,您不需要)

第一个例子:

entity(attribute1:"one", attribute2:"two")
是实际调用的快捷方式:

entity( [ attribute1:"one", attribute2:"two" ] )
因此,您可能需要方括号(表示
attribute1
键包含一个映射),或者需要在括号前面加上另一个方法名,例如:

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

不用担心,有时候你不得不屈从于语法分析器:((或者至少给它一个你想做什么的提示):-)祝你好运!