En su ejemplo, puede simplemente reemplazar null
con `nil y funcionará bien.
require 'erb'
template = <<EOS
<% if (@objectname != nil) then %>
@objectname is not nil
<% else %>
@objectname is nil
<% end %>
EOS
@objectname = nil
ERB.new(template, nil, '>').result # => " @objectname is nil\n"
@objectname = 'some name'
ERB.new(template, nil, '>').result # => " @objectname is not nil\n"
Al contrario de lo que dijo el otro cartel, se puede ver por encima de ese then
funciona bien en Ruby. No es común, pero está bien.
#blank?
y #present?
tienen otras implicaciones. Específicamente, si el objeto responde al #empty?
, verificará si está vacío. Si va al http://api.rubyonrails.org/ y busca "¿en blanco?", Verá en qué objetos está definido y cómo funciona. Mirando definition on Object, vemos "Un objeto está en blanco si es falso, vacío o una cadena de espacios en blanco. Por ejemplo," "," ", nil, [] y {} están en blanco." Debe asegurarse de que esto es lo que desea.
Además, nil se considera falso, y todo lo que no sea falso y nulo se considera verdadero. Esto significa que puede colocar directamente el objeto de la sentencia if, por lo que una forma más canónica de escribir lo anterior sería
require 'erb'
template = <<EOS
<% if @objectname %>
@objectname is not nil
<% else %>
@objectname is nil
<% end %>
EOS
@objectname = nil
ERB.new(template, nil, '>').result # => " @objectname is nil\n"
@objectname = 'some name'
ERB.new(template, nil, '>').result # => " @objectname is not nil\n"
Si necesita explícitamente para comprobar nil
y no false
, puede utilizar el método #nil?
, por que nil es el único objeto que hará que esto vuelva verdadero.
nil.nil? # => true
false.nil? # => false
Object.new.nil? # => false
También sería recomendable jugar con 'rieles console' probar declaraciones sobre la mosca im – Jonathan
tener éste si @ reviews.nil? entonces y siempre es cierto, incluso si hay una opinión o no –
no debe haber 'then' en su' if'. También es posible que desee explicar un poco más acerca de cómo llena las '@ reviews' (si de hecho es' .nil? 'Todo el tiempo) para que podamos darle más ideas. –