Я пишу сценарий Groovy, в котором мне нужно использовать некоторые из моих полей внутри замыканий. Ниже приведен очень упрощенный пример, демонстрирующий мою проблему.
#!/usr/bin/env groovy
import groovy.transform.Field
@Field def first = 'one'
assert first == 'one'
Пока все хорошо. В моем случае это будет String, представляющая имя сервера. Затем я изменяю это значение «по умолчанию» из параметров командной строки - используя CliBuilder () - может быть что-то вроде:
first = 'two'
assert first == 'two'
Это все еще работает. Теперь мне нужно создать новое поле из приведенного выше:
@Field def second = first
assert second == 'two'
В моем случае это будет HTTPBuilder (), с которым я буду делать вызовы REST.
Сбой:
Assertion failed:
assert second == 'two'
| |
'one' false
Есть ли способ заставить это работать?
Неудачная попытка как-то обойти это. Используя посредника, что-то вроде:
def intermediary = first
assert intermediary == 'two'
@Field def second = intermediary
Сбой с:
Caught: java.lang.reflect.InvocationTargetException
java.lang.reflect.InvocationTargetException
at something.main(something)
Caused by: groovy.lang.MissingPropertyException: No such property: intermediary for class: something
at something.<init>(something)
... 1 more