2013-03-13 16 views
0

內操縱變量,我想從每個封閉內操縱在Groovy的變量,就像這樣:Groovy的:從每個

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

但是這給了我以下錯誤:

| Error 2013-03-13 15:26:12,330 [http-bio-8080-exec-2] ERROR errors.GrailsExceptionResolver - NoSuchMethodError occurred when processing request: [GET] /Reporting-Web/reporting/show/1 reporting.web.AppFiguresService$_getProductIDs_closure2.(Ljava/lang/Object;Ljava/lang/Object;Lgroovy/lang/Reference;)V. Stacktrace follows: Message: Executing action [show] of controller [com.xyz.reporting.ReportingController] caused exception: Runtime error executing action Line | Method ->> 195 | doFilter in grails.plugin.cache.web.filter.PageFragmentCachingFilter - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 63 | doFilter in grails.plugin.cache.web.filter.AbstractFilter | 895 | runTask in java.util.concurrent.ThreadPoolExecutor$Worker | 918 | run in ''^ 680 | run . . in java.lang.Thread

Caused by ControllerExecutionException: Runtime error executing action ->> 195 | doFilter in grails.plugin.cache.web.filter.PageFragmentCachingFilter - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 63 | doFilter in grails.plugin.cache.web.filter.AbstractFilter | 895 | runTask in java.util.concurrent.ThreadPoolExecutor$Worker | 918 | run in ''^ 680 | run . . in java.lang.Thread

Caused by InvocationTargetException: null ->> 195 | doFilter in grails.plugin.cache.web.filter.PageFragmentCachingFilter - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 63 | doFilter in grails.plugin.cache.web.filter.AbstractFilter | 895 | runTask in java.util.concurrent.ThreadPoolExecutor$Worker | 918 | run in ''^ 680 | run . . in java.lang.Thread

Caused by NoSuchMethodError: reporting.web.Foo$_getProductIDs_closure2.(Ljava/lang/Object;Ljava/lang/Object;Lgroovy/lang/Reference;)V ->> 77 | getProductIDs in reporting.web.Foo$$ENzya8Hg - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 45 | show in com.xyz.reporting.Foo | 195 | doFilter in grails.plugin.cache.web.filter.PageFragmentCachingFilter | 63 | doFilter in grails.plugin.cache.web.filter.AbstractFilter | 895 | runTask in java.util.concurrent.ThreadPoolExecutor$Worker | 918 | run in ''^ 680 | run . . in java.lang.Thread

我對Groovy相當陌生,任何幫助都會很棒!

回答

1

這工作...

def stringTest = '' 
def foo = ['one', 'two', 'three'] 
foo.each { 
    stringTest += it 
} 
println stringTest 
1

函數 「的concat()」 返回的字符串:

stringTest = stringTest.concat(it) 

要修改在所述封閉迭代器是不可能的。

//編輯 錯誤味精是一個Grails錯誤,而控制器無法打開功能「顯示()」

+0

THX,但是這給了同樣的錯誤,即使我改線到這一點:stringTest.concat(「測試」 ) – Philip 2013-03-13 14:48:50

+1

控制器拋出錯誤消息。它不能打開方法顯示(長ID) – gregorr 2013-03-13 14:53:17

+0

是的。稍後,我將把它分解成一個純粹的Groovy示例,並嘗試在沒有任何完整框架的情況下重現它。 – Philip 2013-03-13 15:16:48

0

Java中的字符串是不可變的。您可以收集concatened字符串:

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

assert stringTest == "onetwothree" 
+0

它不是一個字符串,它是一個gstring。 – 2013-03-13 21:34:06