Подтвердить что ты не робот

Groovy оператор с расширенными точками

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

def animals = ['ant', 'buffalo', 'canary', 'dog']

Поскольку как animals, так и члены списка имеют метод size(), то для того, чтобы вызвать метод для элементов списка (а не самого списка), мне нужно использовать:

animals*.size()

а не:

animals.size()

Однако рассмотрим следующее выражение, которое возвращает список имен методов, доступных в классе String

String.metaClass.methods.name

Как Groovy знает (без использования оператора с расширением-точкой), что я хочу, чтобы свойство name извлекалось из каждого элемента списка, возвращаемого String.metaClass.methods, а не самого списка? Есть ли набор правил для использования в этом случае, например:

  • Если метод/свойство существует в списке, вызовите его в списке
  • В противном случае попробуйте вызвать его для каждого элемента List

Спасибо, Дон

4b9b3361

Ответ 1

Короткий ответ: DefaultGroovyMethods добавляет метод getAt ко всем коллекциям, который выполняет итерацию через коллекцию и собирает значение свойства для каждого,

Если вам интересен длинный ответ, я написал сообщение в котором говорится о том, что кролик кролика metaClass в этой точной теме Некоторое время назад.