Можно ли добавить группу классов в качестве делегатов в groovysh?

Когда я запускаю groovysh, я хотел бы добавить несколько классов, чтобы они выполнялись, как если бы они были делегатами. Это должно работать так:

при условии, что эти классы существуют:

def A{
   def test() {println "test"}       
}

def B{
   def test2() {println "test2"}
}

Я хотел бы иметь возможность сделать это:

groovysh
groovy:000>test()
test
groovy:000>test2()
test2

Я мог бы сканировать классы и вручную добавлять каждый метод в файл groovy.properties, но это было бы чрезвычайно хрупко.

Есть ли способ указать эти классы как делегаты или как-то заставить его действовать так, как будто я сделал что-то эквивалентное:

new A().using{new B.using{ <groovysh runs in here> }}

1 ответ

Не очень хороший ответ:

Я только что понял, что один из возможных ответов: загрузить скрипт, который выглядит так:

classA=new A()
classb=new B()
test=classA.&test
test2=classB.&test

Это не очень хороший ответ, потому что мне нужно создавать эти ссылки на методы для каждого метода, который я хочу представить, но, поскольку он будет работать, я решил опубликовать его.

РЕДАКТИРОВАТЬ - еще один плохой ответ

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

Я надеюсь, что кто-то публикует что-то лучше.

Другие вопросы по тегам