Groovy DSL с помощью круглых скобок? - PullRequest
2 голосов
/ 05 августа 2011

У меня есть отличный сценарий DSL, как это:

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

пока все хорошо. Я запускаю сценарий и устанавливаю делегат сценария для класса, в котором определена сущность, и этот класс обрабатывает все.

Теперь я хочу сделать это:

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

Возможно ли это как-то синтаксически возможно? Поскольку (subattribute1: "one", subattribute2: "two") само по себе ничего не значит, я предполагаю, что нет, хотя мне интересно, есть ли какая-то магия Groovy, о которой я не знаю, которая позволяет это.

А я не хочу делать

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

хотя я знаю, что это работает. Просто предпочтение синтаксиса.

1 Ответ

2 голосов
/ 05 августа 2011

Нет, вы должны использовать квадратную скобку (как вы сказали, что не хотите).

Первый пример:

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

является ярлыком для фактического вызова:

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

Таким образом, вам либо понадобятся квадратные скобки (для обозначения ключа attribute1 содержит карту, либо вам потребуется префикс скобки с другим именем метода, например:

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