【问题标题】:Groovy: Manipulate variable from within eachGroovy:从每个内部操作变量
【发布时间】:2013-03-01 13:24:39
【问题描述】:

我想在每个闭包中操作 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/lang/Object;Ljava/lang/Object;Lgroovy/lang/Reference;)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 引起: 报告.web.Foo$_getProductIDs_closure2.(Ljava/lang/Object;Ljava/lang/Object;Lgroovy/lang/Reference;)V ->> 77 |在reporting.web.Foo$$ENzya8Hg 中获取产品ID - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 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 还很陌生,在这里有任何帮助都会很棒!

【问题讨论】:

    标签: groovy closures each


    【解决方案1】:

    这行得通...

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

    【讨论】:

      【解决方案2】:

      函数“concat()”返回一个字符串:

      stringTest = stringTest.concat(it)
      

      在闭包中修改迭代器是不可能的。

      //编辑 错误消息是grails错误,而控制器无法打开函数“show()”

      【讨论】:

      • Thx,但这给出了相同的错误,即使我将行更改为:stringTest.concat('test')
      • 控制器抛出错误消息。打不开方法show(Long id)
      • 是的。稍后,我将把它分解为一个纯 Groovy 示例,并尝试在没有任何完整框架的情况下重现它。
      【解决方案3】:

      Java 字符串是不可变的。您可以收集连接的字符串:

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

      【讨论】:

      • 不是字符串,是gstring。
      猜你喜欢
      • 2023-02-22
      • 2019-01-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-01
      • 1970-01-01
      • 2013-01-16
      相关资源
      最近更新 更多