61 Stimmen

Wie kann ich überprüfen, ob ein Objekt in Ruby on Rails 2 null ist?

Ich möchte prüfen, wann mein Objekt @objectname nicht gleich Null ist, um die Werte der @objectname sonst um anzuzeigen, dass keine Werte gefunden wurden.

Ich habe dies versucht:

<% if (@objectname != null) then %>

aber ich erhalte eine Fehlermeldung.

76voto

Pavel Veller Punkte 5983

Es ist nil in Ruby, nicht null . Und es ist genug zu sagen if @objectname um zu testen, ob er nicht gleich Null ist. Und nein then . Weitere Informationen finden Sie unter if Syntax hier:

http://en.wikibooks.org/wiki/Ruby_Programming/Syntax/Control_Structures#if

47voto

lesce Punkte 6134

Sie können prüfen, ob ein Objekt nil (null) ist, indem Sie present? oder blank? aufrufen.

@object.present?

Dies gibt false zurück, wenn das Projekt eine leere Zeichenkette oder nil ist.

oder Sie können verwenden

@object.blank?

Dies ist dasselbe wie present? mit einem Knall und Sie können es verwenden, wenn Sie 'unless' nicht mögen. Dies gibt true für einen leeren String oder nil zurück.

21voto

Chloe Punkte 22727

Mit Ruby 2.3 können Sie jetzt &. Operator ('lonely operator'), um zu prüfen, ob nil gleichzeitig mit dem Zugriff auf einen Wert.

@person&.spouse&.name

https://en.wikibooks.org/wiki/Ruby_Programming/Syntax/Operators#Other_operators


Utilisez #try stattdessen, so dass Sie nicht ständig prüfen müssen, ob nil .

http://api.rubyonrails.org/classes/Object.html#method-i-try

@person.try(:spouse).try(:name)

anstelle von

@person.spouse.name if @person && @person.spouse

5voto

Joshua Cheek Punkte 28392

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

4voto

Sie können das einfache not-Flag verwenden, um dies zu überprüfen. Beispiel

if !@objectname

Diese Funktion gibt true zurück, wenn @objectname gleich null ist. Sie sollten keinen Punkt-Operator oder einen Null-Wert verwenden, sonst wird

*** NoMethodError Exception: undefinierte Methode `isNil?' für nil:NilClass

Eine ideale Nullkontrolle würde wie folgt aussehen:

!@objectname || @objectname.nil? || @objectname.empty?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X