我想在每个闭包中操纵Groovy中的变量,如下所示:
def stringTest = ''
def foo = ['one', 'two', 'three']
foo.each {
stringTest.concat(it)
}
println stringTest
但是这给了我以下错误:
|错误2013-03-13 15:26:12,330 [http-bio-8080-exec-2]错误 errors.GrailsExceptionResolver - 发生NoSuchMethodError时 处理请求:[GET] / Reporting-Web / reporting / show / 1 reporting.web.AppFiguresService $ _getProductIDs_closure2(Ljava /郎/对象; Ljava /郎/对象; Lgroovy /郎/参考):V。 Stacktrace如下:消息:执行控制器的动作[show] [com.xyz.reporting.ReportingController]导致异常:运行时 错误执行动作行|方法 - >> 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
中由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 /郎/对象; Ljava /郎/对象; Lgroovy /郎/参考):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很新,任何帮助都会很棒!
答案 0 :(得分:1)
函数“concat()”返回一个字符串:
stringTest = stringTest.concat(it)
无法修改闭包中的迭代器。
//编辑 错误消息是一个grails错误,而控制器无法打开函数“show()”
答案 1 :(得分:1)
这有效......
def stringTest = ''
def foo = ['one', 'two', 'three']
foo.each {
stringTest += it
}
println stringTest
答案 2 :(得分:0)
Java字符串是不可变的。您可以收集串联的字符串:
def stringTest = ''
def foo = ['one', 'two', 'three']
stringTest = foo.collect { stringTest + it }.join()
assert stringTest == "onetwothree"