Как работи затварянето в 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, това обгръща API на критериите за хибернация в строител. Builders се използват в Groovy за създаване на специфични за домейна езици (DSL), като напр. GORM 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 { ... }? Те са коренно различни. Първият извиква метода list и предава Closure като аргумент. Последният се опитва да извика метода "call" и да предаде Closure като аргумент.

person Jeff Scott Brown    schedule 24.05.2014