Groovy ConfigSlurper使用具有相同键的嵌套值导致错误结果

Groovy ConfigSlurper使用具有相同键的嵌套值导致错误结果,groovy,Groovy,我试图在projetct中使用Groovy的ConfigSlurper,但当同一个键在配置中出现两次时,它碰巧有一个奇怪的行为。以下是一个例子: def struct = """ node2 { subnode21="Test1" } root1 { node2 { subnode1="Test2" subnode2=node2.subnode21 } } """ de

我试图在projetct中使用Groovy的ConfigSlurper,但当同一个键在配置中出现两次时,它碰巧有一个奇怪的行为。以下是一个例子:

def struct = """
    node2 {
        subnode21="Test1"
    }
    root1 {
        node2 {
            subnode1="Test2"
            subnode2=node2.subnode21
        }
   }

"""
def config = new ConfigSlurper().parse(struct)
这将产生以下结果:

[
    node2:[
        subnode21:Test1
    ],
    root1:[
        node2:[
            subnode1:Test2,
            subnode21:[:],
            subnode2:[:]
        ]
    ]
]

配置SurrPurp似乎认为,ROOT1闭包中的子节点2= NoDE2.SubNoDE21是ROOT1.NODE2,而不是上面声明的NoDE2闭包。


这是一个已知的限制还是我遗漏了什么?

我认为您不应该将引用用作右值,而应该仅使用值。我的意思是,node2.subnode21在=的右边是不允许的,从那时起我已经查看了类的代码,是的,它是允许的,因为值实际上被解析并替换为正确的值。问题是我是否正确理解了堆栈用于密钥研究,这意味着第一个匹配的密钥将始终是同一对象中的密钥。