Nel tuo esempio, puoi semplicemente sostituire null
con `nil e funzionerà correttamente.
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"
Contrariamente a ciò che l'altro manifesto ha detto, si può vedere sopra che then
funziona bene in Ruby. Non è comune, ma va bene.
#blank?
e #present?
hanno altre implicazioni. In particolare, se l'oggetto risponde a #empty?
, controllerà se è vuoto. Se vai a http://api.rubyonrails.org/ e cerchi "vuoto?", Vedrai su quali oggetti è definito e come funziona. Guardando il definition on Object, vediamo "Un oggetto è vuoto se è falso, vuoto o una stringa di spaziatura.Ad esempio," "," ", nil, [] e {} sono tutti vuoti." Dovresti assicurarti che questo sia ciò che desideri.
Inoltre, nil è considerato falso, e qualsiasi cosa diversa da false e nil è considerata vera. Questo significa che è possibile inserire direttamente l'oggetto nella if, quindi un modo più canonica di scrivere quanto sopra sarebbe
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"
Se è esplicitamente necessario controllare nil
e non false
, è possibile utilizzare il metodo #nil?
, per quale nil è l'unico oggetto che farà sì che questo restituisca true.
nil.nil? # => true
false.nil? # => false
Object.new.nil? # => false
Sarebbe anche consigliabile giocare con 'rotaie console' per provare dichiarazioni sulla im fly – Jonathan
avere questo uno se @ reviews.nil? allora e sempre è vero anche se c'è una recensione o no –
non ci dovrebbe essere 'then' nel tuo' se'. Potreste anche voler spiegare un po 'di più su come compilate '@ reviews' (se è in effetti' .nil? 'Tutto il tempo) per darvi qualche altra idea. –