为什么我得到*Error?

问题描述:

Groovy Console我有这样的:为什么我得到*Error?

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

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

这是当它击中行:

this.metaClass.mixin script 

加载的脚本可能有ar参考加载它的类(这个类),所以当你尝试混合它时,你会得到一个无限循环。

一种解决方法是要做到:

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

我的目标是在增加方法添加到主脚本中,而不是创建已加载脚本的实例 – IttayD 2010-05-20 17:03:04

+0

添加了不使用新实例的方法 – 2010-05-20 18:07:37