我不确定何时需要使用spread-dot运算符.如果我有一个列表,如:
def animals = ['ant', 'buffalo', 'canary', 'dog']
Run Code Online (Sandbox Code Playgroud)
因为这两个animals和列表的成员都有一个size()方法,那么为了在列表的元素(而不是列表本身)上调用该方法,我需要使用:
animals*.size()
Run Code Online (Sandbox Code Playgroud)
而不是:
animals.size()
Run Code Online (Sandbox Code Playgroud)
但是,请考虑以下表达式,该表达式返回String类上可用的方法名称列表
String.metaClass.methods.name
Run Code Online (Sandbox Code Playgroud)
Groovy如何知道(不使用spread-dot运算符)我希望name从返回的列表的每个元素中检索属性String.metaClass.methods,而不是列表本身?在这种情况下是否有一套规则可供使用,例如:
谢谢,唐
Ted*_*eid 10
简短的回答是,DefaultGroovyMethods为所有迭代通过Collection的集合添加了一个"getAt"方法,并为每个集合收集属性值.
如果你对这个很长的答案感兴趣的话,我写了一篇博文,不久前在这个确切的话题上潜入了metaClass的兔子洞.