Я создаю критерии в зависимости от нескольких факторов. В настоящее время я использую вложенные замыкания следующим образом:Grails: используйте несколько затворов внутри другого
Utils.groovy
static def statusAndOrderCriteria = { x ->
...
Utils.commonOrderCriteria.delegate = delegate
Utils.commonOrderCriteria(x)
}
static def commonOrderCriteria = { x ->
...
}
Использование:
Alert.createCriteria().list({
Utils.statusAndOrderCriteria.delegate = delegate
Utils.statusAndOrderCriteria(x)
})
Я хочу использовать несколько затворов, такие как:
Alert.createCriteria().list({
Utils.firstCriteria(a)
Utils.secondCriteria(b)
Utils.statusAndOrderCriteria(x)
})
Я не знаю, как этого достичь. Я знаю, что я не могу переписывать объект делегата несколько раз при одном и том же закрытии.
Это фантастика! Мне пришлось искать аннотацию «TupleConstructor» - для кого-либо еще, она предоставляет конструктор, который позволяет использовать «новые Utils (делегат»). – tylerwal
О, спасибо. Вы видели, как другой Groovy строился в астерах? Вся концепция просто потрясающая! –
Я знаком с '@ Builder' AST – tylerwal