【问题标题】:Groovy arguments with spaceship operator in unique closure具有独特闭包的宇宙飞船运算符的 Groovy 参数
【发布时间】:2012-09-16 02:17:10
【问题描述】:

我对闭包不是很熟悉,而且我有一个,也许,nooby 的问题。 在 Groovy 文档中有一个类集合的 unique() 方法的示例。

其中一个使用了宇宙飞船操作符。 我知道在:

a <=> b

如果 a b 则返回 1,就像 compareTo 一样。

在带有闭包的 Groovy Unique 示例中:

assert [2,3,4] == [2,3,3,4].unique { a, b -> a <=> b }

1.- a、b 参数在集合中是什么意思? “a”是[n]位置,“b”是[n+1]?

2.- 飞船运算符将返回 -1、0 或 1 这与独特的方法有什么关系?仅使用 unique() 有什么区别吗?我尝试了这两种方法,但它一直给我返回相同的结果

提前致谢

【问题讨论】:

  • 标题中提到的“宇宙飞船”运算符在其他语言中称为比较运算符
  • 是的,就像我在问题中所说的那样,我知道宇宙飞船操作员就像(相同)compareTo()。我只是不知道参数在包含两个以上元素的集合中是如何工作的

标签: groovy parameters arguments closures unique


【解决方案1】:
  1. ab 只是集合中的两个项目。它们的顺序并不重要。您真正要做的是将闭包传递给unique(),而闭包定义了如何比较这些项目。当需要比较两个项目时,Groovy 的 unique() 会调用闭包。

  2. unique() 的无参数版本在集合中的项目上使用 compareTo()。 spaceship 运算符是另一种调用compareTo() 的方式,这意味着是的,unique { a, b -&gt; a &lt;=&gt; b }unique() 相同。

【讨论】:

  • 谢谢@doelleri。我知道我正在将一个闭包传递给 unique(),我只是不知道这 2 个参数如何在包含两个以上元素的列表中工作。那么,ab 意味着将列表中的一个元素与任何/所有其他元素一一进行比较?再次感谢。
猜你喜欢
  • 2011-03-04
  • 2010-10-24
  • 2021-08-07
  • 1970-01-01
  • 1970-01-01
  • 2021-07-27
  • 1970-01-01
相关资源
最近更新 更多