Groovy、Grails与链接闭包的问题

Groovy、Grails与链接闭包的问题,grails,groovy,Grails,Groovy,我被难倒了,如果能帮我一点忙,我将不胜感激 1) 这很有效 def critQuery = Vlan.createCriteria() def criteria = criteriaUtil.aproxFilterClosure.curry(Vlan, params) vlanList = critQuery(criteria) 2) 这也行 def critQuery = Vlan.createCriteria() def criteria = {eq('dot1qId', 121.toLo

我被难倒了,如果能帮我一点忙,我将不胜感激

1) 这很有效

def critQuery = Vlan.createCriteria()
def criteria = criteriaUtil.aproxFilterClosure.curry(Vlan, params)
vlanList = critQuery(criteria)
2) 这也行

def critQuery = Vlan.createCriteria()
def criteria = {eq('dot1qId', 121.toLong())}
def ordering = {order('name','asc')}
def query = criteria << ordering
vlanList = critQuery(query)
将这两个闭包标准和顺序链接起来的正确方法是什么?

问题在于。您的
条件
闭包将从
排序
查询中获得上游结果,该查询未定义为接受(Groovy试图向其提供当前值+排序的结果,总共3个参数)

有两种可能的黑客攻击方法:

  • 您可以通过将另一个一次性参数添加到您忽略的aproxFilterClosure来解决此问题

  • 或者你可以试着用这样的东西包装它:

    def x = {Object [] s-> criteria(Arrays.asList(s).subList(0, criteria.maximumNumberOfParameters))}
    
    这将接受任意数量的参数,然后仅使用它可以处理的参数调用criteria闭包


  • 我并不是说我喜欢这两种想法中的任何一种,但如果这条路是你前进的方向,它们可能会让你克服你所看到的具体错误。

    你能实现你使用后的目标吗?你似乎在你的帖子中遗漏了一些错误信息。我尝试了你的第一条建议,效果很好。你是我的英雄!
    class CriteriaUtil {
        ..
        def aproxFilterClosure = {myClass, map ->
               ...
        }
        ..
    }
    
    def x = {Object [] s-> criteria(Arrays.asList(s).subList(0, criteria.maximumNumberOfParameters))}