==
сравнивает ссылки на объекты.
.equals()
сравнивает значения String.
Иногда ==
дает иллюзии сравнения значений String, как в следующих случаях:
String a="Test";
String b="Test";
if(a==b) ===> true
Это связано с тем, что при создании любого строкового литерала JVM сначала ищет этот литерал в пуле строк, и если он найдет совпадение, эта же ссылка будет передана новой String. Из-за этого получаем:
(a == b) ===> true
String Pool
b -----------------> "test" <-----------------a
Однако ==
не выполняется в следующем случае:
String a="test";
String b=new String("test");
if (a==b) ===> false
В этом случае для new String("test")
оператор new String будет создан в куче, и эта ссылка будет указана на b
, поэтому b
будет дана ссылка на кучу, а не на String pool.
Теперь a
указывает на String в пуле String, а b
указывает на String в куче. Из-за этого мы получаем:
, если (a == b) ===> false.
String Pool
"test" <-------------------- a
Heap
"test" <-------------------- b
Пока .equals()
всегда сравнивает значение String, поэтому дает true в обоих случаях:
String a="Test";
String b="Test";
if(a.equals(b)) ===> true
String a="test";
String b=new String("test");
if(a.equals(b)) ===> true
Таким образом, использование .equals()
всегда лучше.
Я не могу оставить только комментарий из-за отсутствия репутации, поэтому я могу давать советы только в разделе ответов.
Итак, я думаю, что вы должны сначала проверить экземпляр instance.at_css ('h1 a'), чтобы убедиться, что у него есть метод children. Некоторые объекты Nokogiri не имеют детей (например, метатег). Надеюсь, это поможет.
Я запускал вашу программу локально и не могу найти никаких тегов в разделе кода, который вы просматриваете.
Причина, по которой вы получаете эту ошибку, в том, что Nokogiri возвращает ноль элемента, и вы пытаетесь удалить что-то, что уже не имеет значения, поэтому вы получаете ошибку NilClass.
Это часть кода, из которой вы пытаетесь получить «h1 a».
<div class="showing" id="event_10427"> <div class="event_image"> <a href="/programme/event/vula-viel-do-not-be-afraid-album-tour,10427/">
<img src="/media/diary/thumbnails/MSJ_vvlive.jpg.600x0_q45.jpg" alt="Picture for event Vula Viel - “Do Not Be Afraid” Album Tour"></a> <span class="tags"> <a href="/programme/view/music/" class="tag_music">music</a> </span> </div> <!-- div event_image --> <a href="/programme/event/vula-viel-do-not-be-afraid-album-tour,10427/">
<p><span class="pre_title"> Ear Trumpet Music presents </span></p> <h3>Vula Viel - “Do Not Be Afraid” Album Tour</h3> <span class="post_title"> </span> </a> <p></p>
<div class="event_details"> <p class="start_and_pricing"> Thu 28 March // 20:00 <br> </p> <p class="copy">The trio of music makers called Vula Viel weave sparse polyrhythms and intricate rhythm structures around ... [<a class="more" href="/programme/event/vula-viel-do-not-be-afraid-album-tour,10427/">more</a>]</p> </div> </div>
Как видите, тегов h1 нет, поэтому Nokogiri возвращает ноль в вашем поиске.
Вы можете изменить тег, если это ошибка от вашего имени; или если не каждая страница имеет тег «h1 a». Вам нужно проверить, возвращает ли
title_el = showing.at_css('h3 a')
ноль, прежде чем пытаться удалить его.