Мне интересно, есть ли способ для объекта Binding для сохранения ссылки на объект вместо ее копирования?
Binding b = new Binding()
String test = "test"
b.setVariable("sth", test)
test = "blah"
GroovyShell gs = new GroovyShell(b)
gs.evaluate("print(sth)")
К сожалению, он печатает "тест".
Есть ли способ сделать это в Groovy?
EDIT:
пример, который я привел, был неправильным и слишком простым.
Я думаю, что моя проблема возникает из-за того, что я создаю экземпляр объекта в одном потоке и запускаю сценарий в другом.
class Test {
[...] // field declarations
public Test(String name, String url, def params, String validateScript, String afterTestScript, GroovyShell shell) {
[...] //just assigning params to fields
shell.setVariable("current", this)
}
void action() {
response = "something"
}
void validate() {
//shell.setVariable("current", this)
}
void afterTest() {
if (afterTestScript) shell.evaluate(afterTestScript)
}
}
Таким образом, объект Test создается в одном потоке, а затем я передаю его как ссылку на объект Runnable, который затем вызывает методы action
, validate
и afterTest
.
Если я закомментирую вызов setVariable
в конструкторе и раскомментирую вызов в validate
, он будет работать нормально.
Возможно ли, что это проблема параллелизма?
В afterTestScript я просто хочу напечатать строку ответа.