0

我想在每个闭包中操作 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] 错误错误。GrailsExceptionResolver - 处理请求时发生 NoSuchMethodError:[GET] /Reporting-Web/reporting/show/1 reporting.web。 AppFiguresService$_getProductIDs_closure2.(Ljava/lang/Object;Ljava/lang/Object;Lgroovy/lang/Reference;)V. Stacktrace 如下:消息:执行控制器 [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 | report.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 回答