Groovy:从每个内部操纵变量

时间:2013-03-13 14:32:05

标签: groovy closures each

我想在每个闭包中操纵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很新,任何帮助都会很棒!

3 个答案:

答案 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"