Groovy:如何在HibernateCriteriaBuilder中分解代码?

Groovy:如何在HibernateCriteriaBuilder中分解代码?,groovy,refactoring,closures,Groovy,Refactoring,Closures,我试图在闭包中分解一些groovy代码 下面是一个示例代码,说明了我想做什么(请参阅) 基本代码: def criteria = Account.createCriteria() def results = criteria { if(A) { // full code section when A } if(B) { // full code section when B } ... if(N) { // full code section

我试图在闭包中分解一些groovy代码

下面是一个示例代码,说明了我想做什么(请参阅) 基本代码:

def criteria  = Account.createCriteria()
def results = criteria  {
  if(A) {
    // full code section when A
  } 
  if(B) {
    // full code section when B
  }
  ...
  if(N) {
    // full code section when N
  }
}
现在我想在方法中提取条件块,以便能够在其他条件中使用它们。 以下是我现在掌握的代码:

def criteria = Account.createCriteria()
def results = criteria  {
 a(criteria)
 b(criteria)
 ...
 n(criteria)
}
def a(criteria) { if(A) /* full code section when A */ }
def b(criteria) { if(B) /* full code section when B */ }
...
def n(criteria) { if(N) /* full code section when N */ }
是否有一种groovy方法可以避免在每个方法的参数中传递条件?(换句话说,有没有办法获取调用上下文?)


而且,为了将其扩展到其他闭包,我应该如何从groovy闭包中提取方法

一种可能性是将a、b、n方法更改为闭包,然后在调用它们之前将它们的
委托
属性设置为
条件
,例如

def criteria = Account.createCriteria()

def results = criteria  {
   a.delegate = criteria
   a()
}

def a = { if(A) /* full code section when A */ }
这满足了您的要求,即避免在每个方法的参数中通过标准,但老实说,我不知道这能实现什么


您在问题中发布的代码更加简洁易读,在我看来

非常感谢您的反馈。事实上,我想我是在试图找到一种方法,将上下文从父闭包传递到子闭包。。。我不知道这是否可能,是否值得。