Dónal
Dónal

Reputation: 187537

Groovy spread-dot operator

I'm unsure about when exactly I need to use the spread-dot operator. If I have a list such as:

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

Because both animals and the members of the list have a size() method, then in order to have the method invoked on the elements of the list (rather than the list itself), I need to use:

animals*.size()

rather than:

animals.size()

However, consider the following expression which returns a list of the method names that are available on the String class

String.metaClass.methods.name

How does Groovy know (without using the spread-dot operator) that I want the name property to be retrieved from each element of the list returned by String.metaClass.methods, rather than the list itself? Is there a set of rules to use in this case such as:

Thanks, Don

Upvotes: 14

Views: 3354

Answers (1)

Ted Naleid
Ted Naleid

Reputation: 26801

The short answer is that DefaultGroovyMethods adds a "getAt" method to all Collections that iterates through the Collection and collects the property value for each.

If you're interested in the long answer, I wrote up a blog post that dives down the metaClass rabbit hole on this exact topic a while ago.

Upvotes: 11

Related Questions