【问题标题】:Groovy dot notation on lists列表上的 Groovy 点表示法
【发布时间】:2012-07-06 16:30:12
【问题描述】:

我不明白 Groovy 中以下构造的目的。

当你有一个东西的集合时,称之为items,你可以通过访问集合上的属性来映射一个属性,也就是说,

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

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

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

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

此外,如果收集符号不够短,还有 *. spread-dot 运算符,它旨在以这种方式使用:

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

模棱两可的点符号的目的是什么?它只是为了节省*. 上的字符而添加的,还是在*. 不起作用而collect 会很麻烦的合法使用案例中?

【问题讨论】:

  • I too 发现list.prop 语法背后的魔力是不必要的,它使事情变得不那么明确而没有真正的收获(除了单个*)。我不知道为什么要添加它,但人们总是可以选择不使用它:)

标签: syntax groovy


【解决方案1】:

我不久前写了一篇名为 "Groovy Spread Operator Optional For Properties" 的博文,深入探讨了在这种情况下的幕后情况。

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

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

【讨论】:

  • 是的,我已经阅读了您的帖子 :-) 但这并没有解释为什么人们首先应该想要这种行为。我觉得它非常令人困惑,所以我想听听一些争论为什么要设计它
  • 例如,您能否举一些您提到的将从这种语法中受益的 DSL 示例?
  • 不幸的是,引用的帖子链接现在已损坏。
  • 感谢 Wayback 机器,我们可以访问博文:web.archive.org/web/20170224073229/http://naleid.com/blog/2008/…
猜你喜欢
  • 2015-07-26
  • 1970-01-01
  • 1970-01-01
  • 2012-07-08
  • 2017-08-24
  • 1970-01-01
  • 1970-01-01
  • 2012-12-07
  • 1970-01-01
相关资源
最近更新 更多