Как работает замыкание в Grails в GORM

Я читал API критериев Grails и нашел следующий код в API Grails: здесь

     def c = Account.createCriteria()
     def results = c {
         projections {
             groupProperty("branch")
         }
         like("holderFirstName", "Fred%")
         and {
             between("balance", 500, 1000)
             eq("branch", "London")
         }
         maxResults(10)
         order("holderLastName", "desc")
     }

мой вопрос заключается в том, что вызов Account.createCriteria() даст вам объект grails.orm.HibernateCriteriaBuilder, но когда я скажу "c {....}", я знаю, что вызывается colsure, но объект, который у нас есть, - это объект HibernateCriteriaBuilder, а не объект Closure, то как закрытие вызывается.


person vicky    schedule 23.05.2014    source источник
comment
Непонятно, о чем вы спрашиваете, когда говорите, как это работает. С какой проблемой вы столкнулись или пытаетесь решить?   -  person Joshua Moore    schedule 23.05.2014
comment
@JoshuaMoore Я отредактировал свой вопрос. Я хочу знать, как вызывается закрытие, когда у нас есть объект HibernateCriteriaBuilder.   -  person vicky    schedule 23.05.2014


Ответы (2)


Как указано в в API, это обертка Hibernate Criteria API. в застройщике. Строители используются в Groovy для создания доменных языков (DSL), таких как ГОРМ DSL.

person Joshua Moore    schedule 23.05.2014
comment
Спасибо . Но предоставленная вами ссылка строителей не имеет полной документации. - person vicky; 23.05.2014
comment
Не существует такой вещи, как полная документация для сборщиков, поскольку это сложная тема, не относящаяся к языку Groovy. Например: groovy.codehaus.org/Builders — наиболее близкая к полной документации, предоставляемая Groovy. Я рекомендую вам провести небольшое исследование по этой теме с помощью Google. - person Joshua Moore; 23.05.2014

Возможно, вы намеревались сделать что-то вроде c.list {...} вместо c{...}? Это принципиально разные. Первый вызывает метод списка и передает замыкание в качестве аргумента. Последний пытается вызвать метод call и передать Closure в качестве аргумента.

person Jeff Scott Brown    schedule 24.05.2014