Книга: Программирование на языке Ruby
11.3.2. Метод const_get
11.3.2. Метод const_get
Метод const_get
получает значение константы с заданным именем из модуля или класса, которому она принадлежит.
str = "PI"
Math.const_get(str) # Значение равно Math::PI.
Это способ избежать обращения к методу eval
, которое иногда считается неэлегантным. Такой подход дешевле с точки зрения потребления ресурсов и безопаснее. Есть и другие аналогичные методы: instance_variable_set
, instance_variable_get
и define_method
.
Метод const_get
действительно работает быстрее, чем eval
. В неформальных тестах — на 350% быстрее, хотя у вас может получиться другой результат. Но так ли это важно? Ведь в тестовой программе на 10 миллионов итераций цикла все равно ушло менее 30 секунд.
Истинная полезность метода const_get
в том, что его проще читать, он более специфичен и лучше самодокументирован. Даже если бы он был всего лишь синонимом eval
, все равно это стало бы большим шагом вперед.
- 11.3.1. Динамическая интерпретация кода
- 11.3.2. Метод const_get
- 11.3.3. Динамическое создание экземпляра класса, заданного своим именем
- 11.3.4. Получение и установка переменных экземпляра
- 11.3.5. Метод define_method
- 11.3.6. Метод const_missing
- 11.3.7. Удаление определений
- 11.3.8. Получение списка определенных сущностей
- 11.3.9. Просмотр стека вызовов
- 11.3.10. Мониторинг выполнения программы
- 11.3.11. Обход пространства объектов
- 11.3.12. Обработка вызовов несуществующих методов
- 11.3.13. Отслеживание изменений в определении класса или объекта
- 11.3.14. Определение чистильщиков для объектов
- 8.2.2. Работа со смонтированными файловыми системами: getmntent()
- 13.3.2. Перевод сообщений: gettext()
- 13.3.3. Работа с множественными числами: ngettext()
- 2.1.3. Функция getopt_long()
- Chapter 11. Iptables targets and jumps
- Where to get iptables
- ACCEPT target
- CLASSIFY target
- CLUSTERIP target
- CONNMARK target
- CONNSECMARK target
- DNAT target