5

我不理解 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很麻烦?

4

1 回答 1

4

不久前,我写了一篇名为“Groovy Spread Operator Optional For Properties”的博客文章,深入探讨了在这种情况下发生了什么。

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

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

于 2012-07-06T17:05:17.827 回答