Je veux vérifier quand mon objet @objectname
n'est pas égal à null pour afficher les valeurs du @objectname
d'autre pour montrer qu'aucune valeur n'a été trouvée.
J'ai essayé ceci:
<% if (@objectname != null) then %>
mais je reçois une erreur.
c'est nil
en Ruby, pas null
. Et il suffit de dire if @objectname
pour vérifier si ce n'est pas nul. Et pas de then
. Vous pouvez trouver plus d'informations sur la syntaxe if
ici:
http://en.wikibooks.org/wiki/Ruby_Programming/Syntax/Control_Structures#if
Vous pouvez vérifier si un objet est nul (null) en appelant present? ou vide? .
@object.present?
cela retournera false si le projet est une chaîne vide ou nil.
ou vous pouvez utiliser
@object.blank?
c'est la même chose que présent? avec un coup et vous pouvez l'utiliser si vous n'aimez pas "sauf". cela retournera true pour une chaîne vide ou nil.
Maintenant, avec Ruby 2.3, vous pouvez utiliser &.
opérateur ('opérateur solitaire') pour vérifier nil
en même temps que l’accès à une valeur.
@person&.spouse&.name
https://en.wikibooks.org/wiki/Ruby_Programming/Syntax/Operators#Other_operators
Utilisation #try
à la place, vous n'avez donc pas besoin de continuer à rechercher nil
.
http://api.rubyonrails.org/classes/Object.html#method-i-try
@person.try(:spouse).try(:name)
au lieu de
@person.spouse.name if @person && @person.spouse
Dans votre exemple, vous pouvez simplement remplacer null
par `nil et tout se passera 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"
Contrairement à ce que disait l'autre affiche, vous pouvez voir ci-dessus que then
fonctionne bien en Ruby. Ce n'est pas commun, mais c'est bien.
#blank?
et #present?
ont d'autres implications. Plus précisément, si l'objet répond à #empty?
, ils vont vérifier si c'est vide. Si vous allez sur http://api.rubyonrails.org/ et recherchez "vide?", Vous verrez sur quels objets il est défini et comment cela fonctionne. En regardant définition sur objet , nous voyons "Un objet est vide s'il est faux, vide ou s'il s'agit d'une chaîne d'espacement, par exemple," "," ", nil, [] et {} sont tous vides. " Vous devez vous assurer que c'est ce que vous voulez.
De plus, zéro est considéré comme faux, et toute chose autre que faux et zéro est considérée comme vraie. Cela signifie que vous pouvez directement placer l’objet dans l’énoncé if. Une méthode plus canonique pour écrire ce qui précède serait alors:
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 vous devez explicitement vérifier nil
et pas false
, vous pouvez utiliser le #nil?
méthode, pour laquelle nil est le seul objet à renvoyer true.
nil.nil? # => true
false.nil? # => false
Object.new.nil? # => false
Vous pouvez utiliser le simple drapeau non pour valider cela. Exemple
if !@objectname
Cela retournera true si @objectname est nil. Vous ne devez pas utiliser d'opérateur de point ou une valeur nulle, sinon il jettera
*** Exception NoMethodError: méthode non définie `isNil? ' pour nil: NilClass
Un chèque nul idéal serait comme:
!@objectname || @objectname.nil? || @objectname.empty?