我对闭包不是很熟悉,而且我有一个,也许是一个非常棒的问题。 在Groovy文档中,有一个类集合的unique()方法的例子。
其中一人使用宇宙飞船运营商。 我知道在:
a <=> b
如果a&lt; 太空飞船运营商返回-1。 b,如果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()有什么区别吗?我尝试了两种方式,它不断给我返回相同的结果
提前致谢
答案 0 :(得分:2)
a
和b
只是集合中的两个项目。它们的顺序并不重要。你真正做的是将一个闭包传递给unique()
,闭包定义了如何比较这些项。当需要比较两个项目时,Groovy的unique()
将调用闭包。
unique()
的无参数版本对集合中的项目使用compareTo()
。太空船运营商是另一种致电compareTo()
的方式,这意味着是的,unique { a, b -> a <=> b }
与unique()
相同。