Самый краткий способ проверить равенство строк (не равенство объектов) для строк или символов Ruby - PullRequest
76 голосов
/ 10 ноября 2009

Я всегда делаю это для проверки равенства строк в Ruby:

if mystring.eql?(yourstring)
 puts "same"
else
 puts "different"
end

Это правильный способ сделать это без проверки равенства объектов?

Я ищу наиболее краткий способ проверки строк на основе их содержимого.

С круглыми скобками и знаком вопроса это выглядит немного неуклюже.

Ответы [ 2 ]

131 голосов
/ 10 ноября 2009

Согласно http://www.techotopia.com/index.php/Ruby_String_Concatenation_and_Comparison

Делать либо

mystring == yourstring

, либо

mystring.eql? yourstring

Эквивалентны.

13 голосов
/ 11 ноября 2009

В вашем примере кода не раскрыта часть вашей темы, а именно символы, поэтому часть вопроса осталась без ответа.

Если у вас есть две строки, foo и bar, и обе могут быть либо строкой, либо символом, вы можете проверить равенство с помощью

foo.to_s == bar.to_s

Немного эффективнее пропускать преобразования строк для операндов с известным типом. Так что если foo это всегда строка

foo == bar.to_s

Но повышение эффективности почти наверняка не стоит требовать дополнительной работы от имени абонента.

До выпуска Ruby 2.2 избегайте интернирования неконтролируемых входных строк с целью сравнения (со строками или символами), поскольку символы не являются сборщиком мусора, и поэтому вы можете открыть себя для отказа в обслуживании из-за исчерпания ресурсов. Ограничьте использование символов до значений, которыми вы управляете, т.е. литералов в вашем коде и свойств доверенной конфигурации.

Ruby 2.2 введена сборка мусора символов .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...