Когда я использовал .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

Кто-нибудь знает причину этого?

1
Kapidis 28 Фев 2017 в 22:23

2 ответа

Лучший ответ

Как всегда, не просто используйте методы, не читая их документацию. Там могут быть важные заметки.

Вот eql? :

Две строки равны, если они имеют одинаковую длину и содержание.

Вот match:

Преобразует шаблон в регулярное выражение (если он еще не был), а затем вызывает его метод сопоставления на стр. Если присутствует второй параметр, он указывает позицию в строке, с которой начинается поиск.

Обратите внимание на часть о конвертации . В регулярном выражении ( и ), среди других символов, имеют существенное значение. Вы не можете использовать match здесь произвольно. У него очень специфическая функция.

Вы редко видите .eql? используемый в реальном коде Ruby, соглашение просто так:

text_from_page == error_text

Метод eql? в первую очередь предназначен для внутреннего использования. Он вступает в игру при сравнении и при поиске в контейнере таких вещей, как массив или хэш.

4
tadman 28 Фев 2017 в 19:28

@tadman . Спасибо. Это решило мою проблему. «.Match» сравнивает значения хеш-функции, тогда как «.eql» сравнивает строки.

0
Kapidis 21 Мар 2017 в 22:55