1

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

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

a <=> b

spaceship 运算符在 a < b 时返回 -1,如果 a==b 则返回 0,如果 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 方法有什么作用?仅使用 unique() 有什么区别吗?我尝试了两种方法,它一直给我返回相同的结果

提前致谢

4

1 回答 1

2
  1. a并且b只是集合中的两个项目。它们的顺序无关紧要。您真正要做的是将闭包传递给unique(),而闭包定义了如何比较项目。unique()当需要比较两个项目时,Groovy 将调用闭包。

  2. 在集合中的项目上unique()使用的无参数版本。compareTo()spaceship 运算符是另一种调用方式compareTo(),表示是,unique { a, b -> a <=> b }等同于unique()

于 2012-09-24T15:54:58.847 回答