我不确定何时确切需要使用扩展点运算符。如果我有一个列表,例如:

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

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

而不是:
animals.size()

但是,请考虑以下表达式,该表达式返回String类上可用的方法名称的列表。
String.metaClass.methods.name

Groovy如何知道(不使用散点运算符)我希望从name返回的列表的每个元素而不是列表本身中检索String.metaClass.methods属性?在这种情况下是否有一组规则可以使用,例如:
  • 如果列表上存在方法/属性,请在列表上调用
  • 否则尝试为List
  • 的每个元素调用它

    谢谢,
    大学教师

    最佳答案

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

    如果您对较长的答案感兴趣,我前一阵子写了一个blog post that dives down the metaClass rabbit hole on this exact topic

    关于Groovy扩展点运算符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/997345/

    10-09 10:05