Это довольно запутанный способ сказать что-то такое простое, как:
defined?(full_display) && full_display
В Ruby есть два значения, которые не соответствуют действительности, nil
и false
, все остальные оцениваются как true, включая 0, пустую строку, среди прочих, которые в противном случае оценивались бы как false в Perl, PHP, и C. Тестирование с помощью .nil?
обычно резервируется для тех редких случаев, когда вы хотите провести различие между false
и неопределенным, и это иногда имеет место с логическими полями, где пропущенное значение отличается от ложного значения.
В любом случае в области просмотра намного проще назначить значения по умолчанию с помощью оператора or-equals ||=
, например:
<% full_display ||= false %>
Это эквивалентно full_display = full_display || false
. Это делает две вещи. Во-первых, она определяет переменную full_display
, даже если она не была создана ранее, а во-вторых, она гарантирует, что она будет содержать значение, которое по крайней мере false
, никогда не будет неопределенным.
Вы часто увидите шаблон ||= default
в коде Ruby, поскольку это простой способ назначить что-либо в случае, если в противном случае будет nil
.