In Ihrem Beispiel können Sie einfach Folgendes ersetzen null
mit `nil und es wird gut funktionieren.
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"
Im Gegensatz zu dem, was der andere Poster sagte, können Sie oben sehen, dass then
funktioniert gut in Ruby. Es ist nicht üblich, aber es ist in Ordnung.
#blank?
y #present?
andere Auswirkungen haben. Insbesondere, wenn das Objekt antwortet auf #empty?
Sie werden prüfen, ob er leer ist. Wenn Sie zu http://api.rubyonrails.org/ und suchen Sie nach "blank?", dann werden Sie sehen, für welche Objekte es definiert ist und wie es funktioniert. Ein Blick auf die Definition zum Objekt sehen wir "Ein Objekt ist leer, wenn es falsch, leer oder eine Zeichenkette mit Leerzeichen ist. Zum Beispiel sind "", " ", nil, [] und {} alle leer." Sie sollten sich vergewissern, dass dies Ihren Wünschen entspricht.
Außerdem gilt nil als falsch, und alles andere als false und nil gilt als wahr. Das bedeutet, dass Sie das Objekt direkt in der if-Anweisung platzieren können, so dass eine kanonischere Schreibweise des obigen Beispiels wie folgt aussehen würde
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"
Wenn Sie ausdrücklich prüfen müssen nil
und nicht false
können Sie die #nil?
Methode, für die nil das einzige Objekt ist, das die Rückgabe von true bewirkt.
nil.nil? # => true
false.nil? # => false
Object.new.nil? # => false