groovy - 为什么我会收到 StackOverflowError?

标签 groovy

Groovy Console我有这个:

import groovy.util.*
import org.codehaus.groovy.runtime.*

def gse = new GroovyScriptEngine("c:\\temp")

def script = gse.loadScriptByName("say.groovy")

this.metaClass.mixin script

say("bye")

say.groovy 包含

def say(String msg) {
  println(msg)
}

编辑:我提交了错误报告:https://svn.dentaku.codehaus.org/browse/GROOVY-4214

最佳答案

当它到达终点线时:

this.metaClass.mixin script

加载的脚本可能引用了加载它的类(此类),因此当您尝试将其混合时,您会遇到无限循环。

解决方法是:

def gse = new groovy.util.GroovyScriptEngine( '/tmp' )
def script = gse.loadScriptByName( 'say.groovy' )
script.newInstance().with {
  say("bye")
}

[编辑]

如果您使用原始脚本,它似乎可以工作,但将 say.groovy 更改为

class Say {
  def say( msg ) {
    println msg
  }
}

关于groovy - 为什么我会收到 StackOverflowError?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2873964/

相关文章:

Groovy XMLSlurper appendNode - 如何强制它生效?

java - 如何从 Java 作为单独的进程运行 groovy?

gradle - 从 1.6 到 1.8 的 Java 升级异常

java - Grails 脚手架不存储给定域结构的引用

groovy - 如何在 Groovy 中为多个目标定义注释?

grails - Grails集合

java - 如何使用 java 或 groovy 计算目录上的 md5 校验和?

grails - Grails动态查找器,其中字段名称包含保留字

grails - PooledConnection 已关闭

grails - @Selector并通知