Хотя это не относится к конкретному примеру, который вы дали, поскольку вы действительно спрашиваете о хэш-ключах, а не о переменных, Ruby действительно дает возможность проверить определение переменной. Используйте ключевое слово defined?
(это не метод, а ключевое слово, так как для интерпретатора требуется специальная обработка):
a = 1
defined? a
#=> "local-variable"
@a = 2
defined? @a
#=> "instance-variable"
@@a = 3
defined? @@a
#=> "class-variable"
defined? blahblahblah
#=> nil
Следовательно, вы можете сделать:
var = defined?(var) ? var : "default value here"
Насколько я знаю, это единственный способ, отличный от уродливого блока begin
/ rescue
/ end
, чтобы определить переменную так, как вы просите, не рискуя NameError. Как я уже сказал, это не относится к хэшам с:
hash = {?a => 2, ?b => 3}
defined? hash[?c]
#=> "method"
i.e. вы проверяете, что метод []
определен, а не пара ключей / значений, которые вы используете для доступа.