2011-12-06 37 views
2

我想用Groovy的ConfigSlurper解析闭包的数据结构(在本例中是一个配置文件)。解析结果将存储在类似于数据结构的对象层次结构中。关于这个数据结构的唯一特别的事实是一些闭包名称在一个闭包中重复自己,例如apple和​​。我看起来像ConfigSlurper内部使用Map替代现有的值。我想知道ConfigSlurper是否实际上能够处理这些类型的数据结构。我使用的Groovy版本是1.7.10。或者,我尝试使用GroovyShell来执行关闭,但执行顺序有一些问题。用Groovy的ConfigSlurper读取嵌套闭包的配置文件

String rules = """ 
fruits { 
    apples { 
     apple { 
      id = 11 

      colors { 
       green { 
        name = 'test1' 
       } 

       green { 
        name = 'test2' 
       } 
      }    
     } 

     apple { 
      id = 12 

      colors { 
       green { 
        name = 'test3' 
       } 

       green { 
        name = 'test4' 
       } 
      } 
     } 
    } 
} 
""" 

ConfigSlurper configSlurper = new ConfigSlurper() 
def config = configSlurper.parse(rules) 
println config 
+0

我可能会从ConfigSlurper开始,并重写[解析(脚本,URL)方法](https://github.com/groovy/groovy-core/blob/master/src/main/groovy/util/ ConfigSlurper.groovy#L157),但是在简单地查看代码之后,这不会是一个2分钟的工作......我猜测它是在范围变量中找到旧节点,所以使用这不是你所需要的... –

回答

1

我能够使用GroovyShell解析这些规则。规则的每一次关闭都需要执行。通过Binding对象可以让您检索值。对于重复性关闭,我必须将关闭的resolveStrategy更改为Closure.DELEGATE_FIRST

+2

您能否详细说明一下回复?可能是代码片段会更好地解释它。 – rajneesh2k10