0

Groovyの変数を、それぞれのクロージャー内から次のように操作したいと思います。

def stringTest = ''
def foo = ['one', 'two', 'three']
foo.each {
    stringTest.concat(it)
}
println stringTest

しかし、これは私に次のエラーを与えます:

| エラー2013-03-1315:26:12,330 [http-bio-8080-exec-2]エラーerrors.GrailsExceptionResolver-リクエストの処理中にNoSuchMethodErrorが発生しました:[GET]/Reporting-Web/reporting/show/1reporting.web。 AppFiguresService $ _getProductIDs_closure2。(Ljava / lang / Object; Ljava / lang / Object; Lgroovy / lang / Reference;)V。スタックトレースは次のとおりです。メッセージ:コントローラー[com.xyz.reporting.ReportingController]のアクション[show]を実行すると、例外が発生しました:アクションの実行中にランタイムエラーが発生しました。メソッド->>195| grails.plugin.cache.web.filter.PageFragmentCachingFilterのdoFilter---------- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- | 63 | grails.plugin.cache.web.filter.AbstractFilterのdoFilter| 895 | java.util.concurrent.ThreadPoolExecutor$WorkerのrunTask| 918 | で実行''^ 680 | 走る 。。java.langで。

ControllerExecutionExceptionが原因:アクションの実行中にランタイムエラーが発生しました->> 195 | grails.plugin.cache.web.filter.PageFragmentCachingFilterのdoFilter---------- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- | 63 | grails.plugin.cache.web.filter.AbstractFilterのdoFilter| 895 | java.util.concurrent.ThreadPoolExecutor$WorkerのrunTask| 918 | で実行''^ 680 | 走る 。。java.lang.Threadで

InvocationTargetExceptionが原因:null->> 195 | grails.plugin.cache.web.filter.PageFragmentCachingFilterのdoFilter---------- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- | 63 | grails.plugin.cache.web.filter.AbstractFilterのdoFilter| 895 | java.util.concurrent.ThreadPoolExecutor$WorkerのrunTask| 918 | で実行''^ 680 | 走る 。。java.lang.Threadで

NoSuchMethodErrorが原因:reporting.web.Foo $ _getProductIDs_closure2。(Ljava / lang / Object; Ljava / lang / Object; Lgroovy / lang / Reference;)V->> 77 | Reporting.web.Foo$$ENzya8HgのgetProductIDs-------- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- | 45 | com.xyz.reporting.Fooで表示| 195 | grails.plugin.cache.web.filter.PageFragmentCachingFilterのdoFilter| 63 | grails.plugin.cache.web.filter.AbstractFilterのdoFilter| 895 | java.util.concurrent.ThreadPoolExecutor$WorkerのrunTask| 918 | で実行''^ 680 | 走る 。。java.lang.Threadで

私はGroovyにまったく慣れていません、どんな助けでもここで素晴らしいでしょう!

4

3 に答える 3

1

関数「concat()」は文字列を返します。

stringTest = stringTest.concat(it)

クロージャ内のイテレータを変更することはできません。

//編集エラーメッセージはgrailsエラーですが、コントローラーは関数「show()」を開くことができません

于 2013-03-13T14:45:43.680 に答える
1

これは動作します...

def stringTest = ''
def foo = ['one', 'two', 'three']
foo.each {
    stringTest += it
}
println stringTest
于 2013-03-13T21:36:51.673 に答える
0

Java文字列は不変です。連結された文字列を収集できます。

def stringTest = ''
def foo = ['one', 'two', 'three']
stringTest = foo.collect { stringTest + it }.join()

assert stringTest == "onetwothree"
于 2013-03-13T15:58:47.907 に答える