Когда я использовал .match и .eql? для сравнения строк они дали разные результаты
text_from_page = "wrong length (should be 64 characters)"
error_text = "wrong length (should be 64 characters)"
if(text_from_page.eql? error_text)
puts 'matched'
else
puts 'Not matched'
end
Следующее сравнение не сработало
if(text_from_page.match error_text)
puts 'matched'
else
puts 'Not matched'
end
Кто-нибудь знает причину этого?
2 ответа
Как всегда, не просто используйте методы, не читая их документацию. Там могут быть важные заметки.
Вот eql?
:
Две строки равны, если они имеют одинаковую длину и содержание.
Вот match
:
Преобразует шаблон в регулярное выражение (если он еще не был), а затем вызывает его метод сопоставления на стр. Если присутствует второй параметр, он указывает позицию в строке, с которой начинается поиск.
Обратите внимание на часть о конвертации . В регулярном выражении (
и )
, среди других символов, имеют существенное значение. Вы не можете использовать match
здесь произвольно. У него очень специфическая функция.
Вы редко видите .eql?
используемый в реальном коде Ruby, соглашение просто так:
text_from_page == error_text
Метод eql?
в первую очередь предназначен для внутреннего использования. Он вступает в игру при сравнении и при поиске в контейнере таких вещей, как массив или хэш.
@tadman . Спасибо. Это решило мою проблему. «.Match» сравнивает значения хеш-функции, тогда как «.eql» сравнивает строки.
Похожие вопросы
Новые вопросы
ruby
Ruby - это многоплатформенный динамический объектно-ориентированный интерпретируемый язык с открытым исходным кодом. Тег [ruby] предназначен для вопросов, связанных с языком Ruby, включая его синтаксис и его библиотеки. Вопросы Ruby on Rails должны быть помечены [ruby-on-rails].