Есть ли способ указать конструктор для Groovy сценария? - PullRequest
0 голосов
/ 22 февраля 2019

У меня есть сценарий groovy с именем Foo.groovy, экземпляр этого сценария можно создать с использованием следующего синтаксиса:

def foo = new Foo()

я знаю, выглядит ли Foo.groovy:

import groovy.transform.Field

@Field def bar

def someMethod() {
  //...
}

следующий синтаксис:

def foo = new Foo(bar: 'baz')

будет использовать конструктор по умолчанию и фактически установит для поля bar значение baz, но допустим, что я хотел манипулировать переданным значением bar длядобавить восклицательный знак в конце, например, "${bar}!"

хотел бы иметь возможность сделать что-то вроде следующего (что не работает AFAIK):

import groovy.transform.Field

@Field def bar

Foo(args) {
  bar = "${args.bar}!"
}

def someMethod() {
  //...
}

Есть лиидиоматический способ сделать это в заводной?

1 Ответ

0 голосов
/ 25 февраля 2019

Любая свободная переменная в основной части скрипта может быть найдена из объекта Binding.Он работает почти как карта, потому что имеет конструктор на основе карты и перегружен getProperty и setProperty.http://docs.groovy -lang.org / latest / html / gapi / groovy / lang / Binding.html

Основной скрипт:

def binding = new Binding(bar: 'baz')
def foo = new Foo(binding)
foo.run()

Foo.groovy:

someMethod(bar + '!')

def someMethod(baz) { // bar/baz value must be passed in
  // do something with baz
}

Я не пробовал это, но должно быть достаточно просто подключить его к Groovy Console и посмотреть, что произойдет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...