Почему я получаю StackOverflowError? - PullRequest
2 голосов
/ 20 мая 2010

В 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 Ответ

3 голосов
/ 20 мая 2010

Это когда он попадает в линию:

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
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...