Ответ 1
Согласно http://www.techotopia.com/index.php/Ruby_String_Concatenation_and_Comparison
Выполнение
mystring == yourstring
или
mystring.eql? yourstring
Являются эквивалентными.
Я всегда делаю это для проверки равенства строк в Ruby:
if mystring.eql?(yourstring)
puts "same"
else
puts "different"
end
Это правильный способ сделать это без проверки равенства объектов?
Я ищу наиболее сжатый способ тестирования строк на основе их содержимого.
С круглыми скобками и вопросительным знаком это кажется немного неуклюжим.
Согласно http://www.techotopia.com/index.php/Ruby_String_Concatenation_and_Comparison
Выполнение
mystring == yourstring
или
mystring.eql? yourstring
Являются эквивалентными.
Ваш образец кода не расширился на часть вашей темы, а именно символы, и поэтому часть вопроса осталась без ответа.
Если у вас две строки: foo и bar, и оба могут быть либо строкой, либо символом, вы можете проверить равенство с помощью
foo.to_s == bar.to_s
Немного более эффективно пропускать преобразования строк в операндах с известным типом. Поэтому, если foo всегда является строкой
foo == bar.to_s
Но выигрыш в эффективности почти наверняка не стоит требовать дополнительной работы от имени вызывающего абонента.
До Ruby 2.2 избегайте использования неконтролируемых входных строк для сравнения (со строками или символами), поскольку символы не собираются в мусор, и поэтому вы можете открыть себя для отказа в обслуживании за счет исчерпания ресурсов. Ограничьте использование символов знаками, которыми вы управляете, т.е. Литералы в вашем коде и надежные свойства конфигурации.
Ruby 2.2 ввел сбор мусора символов.