2012-04-27 12 views
3

私はリストdef vrs=["6.0","6.1","6.1.0"](バージョン)を持っており、この値がdef test=[version:6.1 HotFix11]の関数でマップを取得しています。リストの値が文字列に含まれていることを確認しますか?

testversionの値がリストvrsと一致する場合、その値を確認するにはどうすればよいですか?

私はこの vrs.each{ver-> println test.version.contains(ver)}を試してみましたが、それは

は私のコードが判明間違って何かを持っているException in thread "main" java.lang.StackOverflowError

アップデートを提供します。私はそれが動作する小さなグルーヴィースクリプト&でテストケースを試してみましたので、ここでは...

は完全なコード

private Map params 
private def root 

private def nineBelow 

XmlHandler(String xml) 
{ 
    nineBelow=["6.0","6.1","6.1.0"] 

    params=[:] 
    root=new XmlParser().parseText(xml) 
} 
def getParams() 
{ 
    if(root.product.version.size()>0) 
    { 
     params.version=root.product.version.text() 
    } 

    /*nineBelow.each { 
     println params.version //even this throws java.lang.StackOverflowError 
     //println "$it , ${params.version}" 
     //println ver.getClass()+", "+params.version.getClass() 
     }*/ 

    println nineBelow.each{ver-> println params.version.contains(ver)} 

    /*I need to check whether `params.version` matches with `nineBelow` list, so i'll check for condition here*/ 

    params 
} 

getParams()

static main(args) { 

    String fileContents = new File('E://Projects/agent6.1.xml').text 
    XmlHandler xm=new XmlHandler(fileContents) 

    def params=xm.getParams() 
    println params 
} 

を呼び出し、別のクラスの更新

です

偶数println nineBelow.each { println params.version}は私にException in thread "main" java.lang.StackOverflowError

もっとそれだけで以下のコードの後に​​

def ver=params.version 
    println nineBelow.each { println ver.contains(it) } 

を働い更新

は、ここでの問題は何ですか?

答えて

3

いくつかの例のxmlで失敗する例がありますか? Iドンとして、

false 
true 
false 

しかし、私はあなたの他のコードに問題を見つけることができません。

def vrs=["6.0","6.1","6.1.0"] 
def test=[ version:'6.1 HotFix11' ] 

vrs.each { ver-> println test.version.contains(ver) } 

とプリントを:(あなたがあなたの質問のクラッシュの上部に言っている)、これは実際に動作するので、私は尋ねます「Tは、私は次のようにあなたのコードがあると思い... 'E://Projects/agent6.1.xml'に何が含まれているか

+0

例を試しましたが、これも完璧に動作します。しかし、とにかく問題は解決されます。私の質問の更なる更新を参照してください – abi1964

+0

別の[質問はこちら](http://stackoverflow.com/questions/10346903/how-to-use-a-groovy-class-in-a-jsp-page)を解決できますか? – abi1964

+0

私は 'groovy-all-1.8.6.jar'の代わりに間違ったjarを使っていました。私は' groovy-1.8.6.jar'を使っていました。他の質問のために私の問題を解決しました。ありがとう – abi1964

1

を知っている:

class XmlHandler { 
    private Map params 
    private def root 

    private def nineBelow 

    XmlHandler(String xml) 
    { 
     nineBelow=["6.0","6.1","6.1.0"] 

     params=[:] 
     root=new XmlParser().parseText(xml) 
    } 

    def getParams() 
    { 
     if(root.product.version.size()>0) 
     { 
      params.version=root.product.version.text() 
     } 

     nineBelow.each { 
      println params.version //even this throws java.lang.StackOverflowError 
      //println "$it , ${params.version}" 
      //println ver.getClass()+", "+params.version.getClass() 
     } 
    } 
} 

def doc = """ 
    <root> 
     <product> 
      <version>1.0</version> 
     <version>2.0</version> 
     <version>3.0</version> 
     <version>4.0</version> 
     <version>5.0</version> 
    </product> 
</root> 
""" 

XmlHandler handler = new XmlHandler(doc) 
handler.getParams() 

したがって、println params.versionでは実際にはgetParams().versionが呼び出され、無限の再帰呼び出しが行われます。

チェックGroovy @ symbol before fieldsとしてtim_yatesそこに言う、¿バグや機能?

関連する問題