Что такое <=>
оператор Ruby (космический корабль)? Реализован ли оператор на каких-либо других языках?
ruby
operators
comparison-operators
spaceship-operator
Джастин этир
источник
источник
[1,3,2] <=> [2,2,2]
?»[1,nil] <=> [1,3]
вы получаетеnil
из-за непротиворечивости алгоритма, сравнивая каждый элемент по очереди, пока<=>
результат НЕ будет0
. В этом примере Ruby не может объявить меньше или больше, чем просто, поскольку сравнение просто невозможно. К нимnil
следует относиться как к «не равным». Если вы знаете что - то о данных, и , например , хотите , чтобы лечить ,nil
как0
, Ruby делает это легко.Ответы:
Perl был, вероятно, первым языком, который использовал это. Groovy - это другой язык, который его поддерживает. В принципе , вместо того , чтобы вернуться
1
(true
) или0
(false
) в зависимости от того , аргументы равные или неравные, оператор космического корабля вернется1
,0
или в−1
зависимости от значения левого аргумента по отношению к правому аргументу.Это полезно для сортировки массива.
источник
Метод космического корабля полезен, когда вы определяете его в своем собственном классе и включаете модуль Comparable . Ваш класс получает
>, < , >=, <=, ==, and between?
методы бесплатно.источник
Это общий оператор сравнения. Он возвращает либо -1, 0, либо +1 в зависимости от того, меньше ли его получатель, равен или больше его аргумента.
источник
Я объясню на простом примере
[1,3,2] <=> [2,2,2]
Ruby начнет сравнивать каждый элемент обоих массивов с левой стороны.
1
для левого массива меньше, чем2
для правого массива. Следовательно, левый массив меньше правого. Выходной будет-1
.[2,3,2] <=> [2,2,2]
Как и выше, он сначала сравнивает первый элемент, который равен, затем он сравнивает второй элемент, в этом случае второй элемент левого массива больше, следовательно, вывод равен
1
.источник
Поскольку этот оператор сводит сравнения к целочисленному выражению, он предоставляет наиболее общий способ сортировки по возрастанию или убыванию на основе нескольких столбцов / атрибутов.
Например, если у меня есть массив объектов, я могу делать такие вещи:
Этот базовый шаблон можно обобщить для сортировки по любому количеству столбцов в любой перестановке по возрастанию / убыванию каждого.
источник
Согласно RFC, который представил оператора , $ a
<=>
$ bПример:
БОЛЬШЕ:
источник