Comment puis-je vérifier si une variable est définie en Ruby ? Existe-t-il un isset
-disponible ?
Il convient de noter que la variable qui a pour valeur nil
est initialisé.
Comment puis-je vérifier si une variable est définie en Ruby ? Existe-t-il un isset
-disponible ?
Utilisez le defined?
mot-clé ( documentation ). Elle renverra une chaîne de caractères avec le type de l'élément, ou nil
s'il n'existe pas.
>> a = 1
=> 1
>> defined? a
=> "local-variable"
>> defined? b
=> nil
>> defined? nil
=> "nil"
>> defined? String
=> "constant"
>> defined? 1
=> "expression"
Comme l'a dit Skalee : "Il faut noter que la variable qui est mise à nil est initialisée".
>> n = nil
>> defined? n
=> "local-variable"
Si vous voulez définir une variable si elle n'existe pas et la laisser tranquille si elle existe, voir la réponse de @danmayer (qui fait appel à la fonction ||=
) ci-dessous.
Voici une autre bizarrerie que je peux rencontrer Si vous définissez une variable dans un bloc if dont la condition n'est jamais remplie, defined?
retourne toujours vrai pour une variable définie dans ce bloc !
Merci pour cette contribution ! Je suis un débutant en ruby/rails et je suis tombé sur cette syntaxe hier soir, j'ai eu du mal à comprendre ce qu'elle signifiait. Cela semble très pratique !
N'utilisez pas ||=
avec des valeurs booléennes, de peur que vous ne ressentiez la douleur de la confusion.
La syntaxe correcte pour l'énoncé ci-dessus est :
if (defined?(var)).nil? # will now return true or false
print "var is not defined\n".color(:red)
else
print "var is defined\n".color(:green)
end
en substituant ( var
) avec votre variable. Cette syntaxe renvoie une valeur vrai/faux à évaluer dans l'instruction if.
@vol7ron - Cette syntaxe est parfaitement valide. L'utilisation de l'appel à .nil?
est plus idiomatique, comme on dit. C'est plus "orienté objet" de demander à un objet s'il est nil
que d'utiliser un opérateur de comparaison. Ni l'un ni l'autre n'est difficile à lire, alors utilisez celui qui vous permet d'expédier plus de produits.
Le guide de style ruby dit "Favoriser unless plutôt que if pour les conditions négatives". github.com/bbatsov/ruby-style-guide
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.