2011-12-06 19 views
2

GroovyのConfigSlurperでクロージャのデータ構造(この場合は設定ファイル)を解析したいと思います。解析結果は、データ構造に類似したオブジェクト階層に格納されます。このデータ構造に関して特別なことは、いくつかのクロージャー名が1つのクロージャー内で繰り返されるという事実だけである。 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で始まり、[parse(Script、URL)メソッド](https://github.com/groovy/groovy-core/blob/master/src/main/groovy/util/)を上書きします。 ConfigSlurper.groovy#L157)、しかし簡単にコードを見た後、2分の仕事にはならないでしょう...私はそれがあなたが必要とするものではないものを使用して、スコープ変数の古いノードを見つけると思っています... –

答えて

1

私はGroovyShellを使用して、これらのルールを解析することができました。ルールの各クロージャが実行される必要があります。 Bindingオブジェクトに渡されると、値を取得できます。繰り返し閉鎖のために、私は閉鎖のresolveStrategyClosure.DELEGATE_FIRSTに変更しなければならなかった。

+2

あなたはちょっとしたレスポンスを教えてください。コードスニペットがそれをより良く説明するかもしれません。 – rajneesh2k10

関連する問題