Разница между `a || = b` и` a = b, если a.nil? - PullRequest
0 голосов
/ 12 июня 2018

Я проверяю проект Rails.На странице HTML-шаблона ERuby я увидел несколько таких строк:

<% option_1 = false if option_1.nil? %>
<% option_2 = false if option_2.nil? %>
<% option_3 = false if option_3.nil? %>

Я не могу понять, почему это не написано так:

<% option_1 ||= false %>

В чем разница||= и if nil? в этом случае?

Ответы [ 2 ]

0 голосов
/ 12 июня 2018

Вместо определения отсутствующих локальных переменных вы можете использовать local_assigns в своих представлениях для ссылки на локальные переменные, не вызывая NameError.

Итак, вместо:

<% option_1 ||= false %>
<% option_2 ||= false %>
<% option_3 ||= false %>

<% if option_1 %>
  ...
<% end %>

<% if option_2 %>
  ...
<% end %>

У вас есть:

<% if local_assigns[:option_1] %>
  ...
<% end %>

<% if local_assigns[:option_2] %>
  ...
<% end %>
0 голосов
/ 12 июня 2018

В данном конкретном случае нет разницы, но это может быть по привычке.Всякий раз, когда я вижу, что nil? используется, оно почти всегда используется не по назначению.В Ruby очень немногие вещи являются логически ложными, только буквальные false и nil.

Это означает, что код, подобный if (!x.nil?), почти всегда лучше выражается как if (x), если только не ожидается, что xможет быть буквальным false.

Я бы переключил это на ||= false, потому что это имеет тот же результат, но это в основном вопрос предпочтений.Единственным недостатком является то, что назначение будет происходить каждый раз, когда запускается строка, а не один раз с тестом .nil?.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...