2011-12-06 36 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