我不确定何时需要使用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
属性,而不是列表本身?在这种情况下是否有一组规则可供使用,例如:
谢谢, 唐
答案 0 :(得分:10)
简短的回答是DefaultGroovyMethods adds a "getAt" method to all Collections遍历Collection并收集每个的属性值。
如果你对这个长篇答案感兴趣,我前一段时间写了blog post that dives down the metaClass rabbit hole on this exact topic。