Что делает ==, делают в Ruby?

В Java, == самый сильный вид равенства (равенство указателя): a == b всегда подразумевает a.equals(b). Однако в Ruby, == более слабо, чем .equals?:

ruby-1.9.2-rc2 > 17 == 17.0
 => true 
ruby-1.9.2-rc2 > 17.equal?(17.0)
 => false

Так, где я могу узнать больше ==? Какие проверки я должен ожидать, когда я сравню два объекта с ним?

9
задан Patrick McElhaney 2 August 2010 в 07:52
поделиться

4 ответа

вкратце вот что вам нужно знать:

Сравнение == проверяет, равны ли два значения

eql? проверяет, равны ли два значения и одного типа

equal? ​​ проверяет, являются ли два объекта одним и тем же объектом.

Хороший блог об этом находится здесь .

8
ответ дан 3 November 2019 в 01:52
поделиться

на самом деле они оба просто методы == означает объект. == (другой_объект) равно? означает object.equals? (other_object)

Однако в этом случае equals используется в основном для сравнения поиска по хешу т.е. a_hash [1] не должна быть той же парой ключ-значение, что и a_hash [1.0]

HTH. -r

1
ответ дан 3 November 2019 в 01:52
поделиться

== - это просто метод. Я думаю, что он очень хорошо объясняется здесь:

Обычно этот метод переопределяется в классах-потомках, чтобы обеспечить специфическое для класса значение.

вместе с примером с Numeric.

Однако здесь есть подводный камень: поскольку == является методом левого операнда, не всегда безопасно предполагать, что результат a==b должен быть таким же, как и b==a. Особенно в тех случаях, когда a - это вызов метода, который в динамическом языке, таком как Ruby, не всегда должен возвращать значения одного и того же типа.

1
ответ дан 3 November 2019 в 01:52
поделиться
jruby-1.5.0 > 17 ==17
 => true 
jruby-1.5.0 > 17 == 17.0
 => true 
jruby-1.5.0 > 17 === 17.0
 => true 
jruby-1.5.0 > 17.equal?(17.0)
 => false 
jruby-1.5.0 > 17.id
 => 35 
jruby-1.5.0 > (17.0).id
(irb):12 warning: Object#id will be deprecated; use Object#object_id
 => 2114 

Все в рубине - это объект. объект 17 не то же самое, что объект 17.0 и равен? сравнивает объекты, а не значения объектов.

0
ответ дан 3 November 2019 в 01:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: