неопределенный метод `children 'для nil: NilClass (NoMethodError)

== сравнивает ссылки на объекты.

.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() всегда лучше.

0
задан iamstanislav 10 March 2019 в 17:27
поделиться

2 ответа

Я не могу оставить только комментарий из-за отсутствия репутации, поэтому я могу давать советы только в разделе ответов.

Итак, я думаю, что вы должны сначала проверить экземпляр instance.at_css ('h1 a'), чтобы убедиться, что у него есть метод children. Некоторые объекты Nokogiri не имеют детей (например, метатег). Надеюсь, это поможет.

0
ответ дан Voloshin 10 March 2019 в 17:27
поделиться

Я запускал вашу программу локально и не могу найти никаких тегов в разделе кода, который вы просматриваете.

Причина, по которой вы получаете эту ошибку, в том, что 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')

ноль, прежде чем пытаться удалить его.

0
ответ дан NemyaNation 10 March 2019 в 17:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: