Самый краткий способ проверить равенство строк (не равенство объектов) для строк или символов Ruby?

Я всегда делаю это, чтобы проверить равенство строк в Ruby:

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

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

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

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

Ответы на вопрос(2)

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

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

foo.to_s == bar.to_s

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

foo == bar.to_s

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

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

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

 Nate03 февр. 2014 г., 19:39
Это необходимо переформулировать: «Избегайте интернирования неконтролируемых строк ввода [...], потому что символы не являются сборщиком мусора ", Спасибо, @Sheldonh.
 sheldonh14 авг. 2013 г., 15:11
Ну и дела, я не имелЯ думал об этом. Спасибо яМы изменили мой ответ на основе вашего комментария.
 sheldonh05 февр. 2014 г., 00:36
Спасибо, но это изменение пришло от @Patru. :-)
 sheldonh12 нояб. 2009 г., 10:28
Отлично, спасибо, что нашли время, чтобы добавить это.
 Chuck12 нояб. 2009 г., 04:41
foo.intern == bar.intern было бы лучше - интернирование строки в среднем более эффективно, чем создание строки из символа. (Если данная строка была ранее интернирована, она просто возвращает символ.)
 Patru13 авг. 2013 г., 05:11
На самом деле, я не думаю, что было бы хорошей идеей создавать символ из строки, просто чтобы немного сэкономить на некоторых сравнениях, поскольку он будет пропускать символы, если строка не совпадает. Символы не являются сборщиком мусора и поэтому не должны создаваться, если вы не собираетесь их хранить, в противном случае вы создаете вектор для атаки типа «отказ в обслуживании».
Решение Вопроса

В соответствии сhttp://www.techotopia.com/index.php/Ruby_String_Concatenation_and_Comparison

Делать либо

mystring == yourstring

или же

mystring.eql? yourstring

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

 Chuck10 нояб. 2009 г., 20:08
Это правильно. Идентификатор компаратора есть.equal?

Ваш ответ на вопрос