Visual Studio - Ошибка при нажатии на Решение - > Свойства (ссылка на объект не установлена ​​для экземпляра объекта)

Хотя это не относится к конкретному примеру, который вы дали, поскольку вы действительно спрашиваете о хэш-ключах, а не о переменных, 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. вы проверяете, что метод [] определен, а не пара ключей / значений, которые вы используете для доступа.

37
задан ViRuSTriNiTy 30 March 2017 в 12:18
поделиться