Почему неинициализированные переменные вызывают ошибку, а другие - предупреждение? - PullRequest
2 голосов
/ 01 августа 2011

Сообщение в блоге Неинициализированные переменные указывают на то, что неинициализированные переменные класса, локальные переменные и константы вызывают исключение (после прохождения method_missing или их эквивалента), в то время как неинициализированные глобальные переменные и переменные экземпляра вызывают только предупреждение.

Есть ли логика, из которой возникают исключения, а какие вызывают только предупреждение?

1 Ответ

2 голосов
/ 05 августа 2011

Я предполагаю, что исключения предоставляются, когда они могут быть полезны при метапрограммировании.Вы можете легко создать глобальную переменную или переменную экземпляра, если обнаружите, что она отсутствует - я часто вижу идиому:

@var ||= 'default_value'

Не нужно ничего особенного.

Для классов - другие константыи методы, более неудобно проверять, определены ли они, и использовать их встроенными.Исключения (и связанные с ними методы, такие как const_missing и method_missing, предоставляют хуки для обработки их отсутствия. Например, я считаю, что Rails использует const_missing для загрузки классов во время выполнения.

...