Groovy点阵运算符

时间:2009-06-15 17:33:22

标签: groovy

我不确定何时需要使用spread-dot运算符。如果我有一个列表,如:

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

因为animals和列表成员都有size()方法,所以为了在列表的元素上调用方法(而不是列表本身),我需要使用:

animals*.size()

而不是:

animals.size()

但是,请考虑以下表达式,该表达式返回String类

上可用的方法名称列表
String.metaClass.methods.name

Groovy如何知道(不使用spread-dot运算符)我希望从name返回的列表的每个元素中检索String.metaClass.methods属性,而不是列表本身?在这种情况下是否有一组规则可供使用,例如:

  • 如果List上存在方法/属性,则在List
  • 上调用它
  • 否则尝试为List
  • 的每个元素调用它

谢谢, 唐

1 个答案:

答案 0 :(得分:10)

简短的回答是DefaultGroovyMethods adds a "getAt" method to all Collections遍历Collection并收集每个的属性值。

如果你对这个长篇答案感兴趣,我前一段时间写了blog post that dives down the metaClass rabbit hole on this exact topic