Bien que cela ne soit pas pertinent dans l'exemple spécifique que vous avez donné puisque vous posez vraiment la question des clés de hachage, et non des variables, Ruby offre un moyen de vérifier la définition des variables. Utilisez l'icône defined?
(il ne s'agit pas d'une méthode, mais d'un mot-clé, car il nécessite un traitement spécial par l'interprète), comme suit :
a = 1
defined? a
#=> "local-variable"
@a = 2
defined? @a
#=> "instance-variable"
@@a = 3
defined? @@a
#=> "class-variable"
defined? blahblahblah
#=> nil
Vous pourriez donc le faire :
var = defined?(var) ? var : "default value here"
Pour autant que je sache, c'est le seul moyen autre qu'une vilaine begin
/ rescue
/ end
pour définir une variable de la manière que vous demandez sans risquer une NameError. Comme je l'ai dit, cela ne s'applique pas aux hachages puisque :
hash = {?a => 2, ?b => 3}
defined? hash[?c]
#=> "method"
c'est-à-dire que vous vérifiez que la méthode []
est définie plutôt que la paire clé/valeur à laquelle vous l'utilisez pour accéder.
0 votes
Pour les variables non-ENV, qui n'échouent pas bien lorsqu'elles ne sont pas définies, vous devrez utiliser quelque chose comme
defined?( some_variable ) ? some_variable : "default value"