为什么我得到StackOverflowError?

时间:2010-05-20 13:10:10

标签: 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

1 个答案:

答案 0 :(得分:3)

当它出现在线上时:

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
  }
}