2012-09-24 4 views
1

Я не очень хорошо разбираюсь в закрытии, и у меня есть, может быть, нубийский вопрос. В документах Groovy есть пример метода unique() коллекции классов.Гробовые аргументы с оператором космического корабля в единственном замыкании

И один из них использует оператора космического корабля. Я знаю, что в:

a <=> b 

Оператор космического корабля возвращает -1, если в < б, 0, если A == B и 1, если а> Ь, как в CompareTo.

В Groovy Unique с примером закрытия:

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

1.- Что A, B аргументы средства в коллекции? - это «а» позиция [n] и «b» [n + 1]?

2.- Оператор космического корабля вернет -1, 0 или 1 . Что он делает с помощью уникального метода? есть ли разница с использованием unique()? Я попробовал оба пути, и он постоянно возвращается мне SAMES результатам

Спасибо заранее

+0

Оператор «космический корабль» refered в заголовок известен как оператор сравнения на других языках –

+0

да, как я уже сказал в вопросе, я знаю, что оператор космического корабля, как (то же), как 'CompareTo () '. Я просто не знал, как аргументы работали в коллекции с более чем двумя элементами. –

ответ

2
  1. a и b лишь два элемента в коллекции. На самом деле не имеет значения, в каком порядке они находятся. То, что вы действительно делаете, - это закрытие до unique(), а закрытие определяет, как сравнивать элементы. Закрытие будет называться Groovy's unique(), когда необходимо сравнить два элемента.

  2. Версия no-arg unique() использует compareTo() по предметам в коллекции. Оператор космического корабля - это еще один способ позвонить compareTo(), что означает, что да, unique { a, b -> a <=> b } идентичен unique().

+0

Спасибо @doelleri. Я знал, что передаю закрытие уникальному(), я просто не знал, как 2 аргумента работают в списке с более чем двумя элементами. Итак, 'a' и' b' означает сравнение одного элемента списка с любым/всеми остальными по одному? Еще раз спасибо. –

Смежные вопросы