使用Groovy';s配置slurper

使用Groovy';s配置slurper,groovy,closures,config,dsl,Groovy,Closures,Config,Dsl,我想用Groovy解析闭包的数据结构(在本例中是一个配置文件)。解析结果将存储在与数据结构类似的对象层次结构中。这种数据结构的唯一特殊之处在于,一些闭包名称在一个闭包中重复出现,例如apple和green。我看起来像是ConfigSlurper正在内部使用一个Map来替换已经存在的值。我想知道ConfigSlurper是否真的能够处理这些类型的数据结构。我使用的Groovy版本是1.7.10。或者,我尝试使用GroovyShell执行闭包,但执行顺序有一些问题 String rules = ""

我想用Groovy解析闭包的数据结构(在本例中是一个配置文件)。解析结果将存储在与数据结构类似的对象层次结构中。这种数据结构的唯一特殊之处在于,一些闭包名称在一个闭包中重复出现,例如
apple
green
。我看起来像是
ConfigSlurper
正在内部使用一个
Map
来替换已经存在的值。我想知道
ConfigSlurper
是否真的能够处理这些类型的数据结构。我使用的Groovy版本是1.7.10。或者,我尝试使用
GroovyShell
执行闭包,但执行顺序有一些问题

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

我能够使用
GroovyShell
解析这些规则。规则的每个闭包都需要执行。传入的
绑定
对象允许您检索值。对于重复的闭包,我必须将闭包的
resolveStrategy
更改为
闭包。首先委派

我可能会从ConfigSlurper开始,然后重写,但在简要查看代码后,这不会是2分钟的工作。。。我猜它是在scope变量中查找旧节点,所以使用的不是您所需要的…您能详细说明一下响应吗?可能是一段代码片段可以更好地解释它。