2009-06-15 12 views
12

No estoy seguro de cuándo exactamente necesito usar el operador de puntos extendidos. Si tengo una lista como:Groovy spread-dot operator

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

Debido a que ambos animals y los miembros de la lista tienen un método size(), a continuación, con el fin de tener el método invocado en los elementos de la lista (en lugar de la lista en sí), tengo que usar:

animals*.size() 

en lugar de:

animals.size() 

Sin embargo, tenga en cuenta la siguiente expresión que devuelve una lista de los nombres de los métodos que están disponibles en t que la clase String

String.metaClass.methods.name 

¿Cómo sabe maravilloso (sin utilizar el operador de difusión-punto) que yo quiero la propiedad name a ser recuperada de cada elemento de la lista devuelta por String.metaClass.methods, en lugar de la propia lista? ¿Hay un conjunto de reglas para usar en este caso como:

  • Si el método/propiedad existe en la lista, lo invocan en la Lista
  • De lo contrario tratar de invocarlo para cada elemento de la lista

Gracias, Don

+0

Es mágico. – Randolpho

Respuesta