gpt4 book ai didi

grails - 如何将隐式参数传递给Grails中的Closure?

转载 作者:行者123 更新时间:2023-12-02 15:42:16 25 4
gpt4 key购买 nike

我有许多具有相同逻辑的查询,因此我决定将其提取到闭包中。

这是一个例子:

Closure whereByProjectIdAndUser = { Criteria cr, Long projectId, User user ->
Long userId = user.id
Boolean isReviewer = user.isReviewer()

cr.isNull 'project.deletedAt'
cr.eq 'project.id', projectId

(cr | {
cr.eq 'owner.id', userId

if (isReviewer) {
cr & {
cr.eq 'reviewer.id', userId
cr.ne 'project.certificationStatus', ProjectCertificationStatus.None
}
}
})
}

@Transactional(readOnly = true)
RrmUtilization[] getAllByProjectIdAndUser(Long projectId, User user) {

BuildableCriteria cr = RrmUtilization.createCriteria()
RrmUtilization[] result = cr.list {
createAlias('project', 'project', JoinType.INNER_JOIN)
createAlias('project.owner', 'owner', JoinType.INNER_JOIN)
createAlias('project.reviewer', 'reviewer', JoinType.LEFT_OUTER_JOIN)

isNull 'deletedAt'

whereByProjectIdAndUser(cr, projectId, user)

} as RrmUtilization[]

result
}

这很好,但是,我试图了解如何避免将BuildableCriteria显式传递给闭包?有没有办法让它隐式传递并获得更好的代码?

也许总体上有一些更好的方法?

最佳答案

您可以使用关键字this来访问闭包的封闭类中的参数。

Groovy文档:http://groovy-lang.org/closures.html#closure-owner

关于grails - 如何将隐式参数传递给Grails中的Closure?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55883147/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com