列表上的Groovy点表示法

时间:2012-07-06 16:30:13

标签: syntax groovy

我不了解Groovy中以下构造的目的。

每当你有一组东西,称之为items,你只需通过访问该集合上的那个属性就可以映射一个属性,即

items.prop == items.collect { it.prop }

这对我来说很奇怪,因为我认为第一个符号实际上意味着我想要访问集合对象本身的属性。例如,可能会发生歧义的真实案例

[[1,2,3],['cat', 'elephant']].size == 2

但根据之前的表示法,它应该等于[3, 2]

此外,如果收集符号不够短,那么*.扩散点运算符就是以这种方式使用:

[[1,2,3],['cat', 'elephant']]*.size = [3, 2]
  

模糊点符号的目的是什么?是仅仅添加了保存在*.上的字符,还是在*.不起作用且collect会很麻烦的情况下使用合法用例?

1 个答案:

答案 0 :(得分:4)

我前段时间写了一篇名为"Groovy Spread Operator Optional For Properties"的博客文章,深入了解了这种情况下的问题。

简短的回答是,它是更多的语法糖,并最终调用DefaultGroovyMethods.getAt(Collection, String)

它没有任何巨大的优势,但它可以使一些DSL更容易编写,因为无论对象是集合还是单个对象,它们都能正常运行。