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, все равно это стало бы большим шагом вперед.

Данный текст является ознакомительным фрагментом.



Поделитесь на страничке

Похожие главы из других книг:

Метод Run

Из книги автора

Метод Run Параметр intWindowStyle устанавливает вид окна для запускаемого приложения (табл. 1.13).Таблица 1.13. Типы окна (intWindowStyle) Параметр Константа Visual Basic Описание 0 vbHide Прячет текущее окно и активизирует другое окно (показывает его и передает ему фокус) 1 vbNormalFocus Активизирует и


Метод Delete

Из книги автора

Метод Delete Если параметр force равен false или не указан, то с помощью метода Delete будет нельзя удалить каталог с атрибутом "только для чтения" (read-only). Установка для force значения true позволит сразу удалять такие каталоги.При использовании метода Delete неважно, является ли заданный


Метод Move

Из книги автора

Метод Move Обязательный параметр destination определяет каталог, в который будет производиться перемещение; групповые символы в имени каталога недопустимы. Замечание  Вместо метода Move можно использовать метод MoveFolder объекта


Метод Copy

Из книги автора

Метод Copy Обязательный параметр destination определяет файл, в который будет производиться копирование; групповые символы в имени файла недопустимы.Параметр overwrite является логической переменной, определяющей, следует ли заменять уже существующий файл с именем destination (overwrite=true)


Метод Delete

Из книги автора

Метод Delete Если параметр force равен false или не указан, то с помощью метода Delete будет нельзя удалить файл с атрибутом "только для чтения" (read-only). Установка для force значения true позволит сразу удалять такие файлы. Замечание  Вместо метода Delete можно использовать метод DeleteFile


Метод Move

Из книги автора

Метод Move Обязательный параметр destination определяет файл, в который будет производиться перемещение; групповые символы в имени файла недопустимы. Замечание Вместо метода Move можно использовать метод MoveFile объекта


8.3.1. Метод inject

Из книги автора

8.3.1. Метод inject Метод inject пришел в Ruby из языка Smalltalk (впервые он появился в версии Ruby 1.8). Его поведение интересно, хотя с первого раза понять его нелегко.Он отражает тот факт, что мы часто хотим обойти список и по ходу «аккумулировать» некоторый результат. Конечно, самый


8.3.3. Метод partition

Из книги автора

8.3.3. Метод partition Как говорится, «в мире есть два сорта людей: те, что делят людей по сортам, и те, что не делят». Метод partition относится не к людям (хотя мы можем представить их в Ruby как объекты), но тоже делит набор на две части.Если при вызове partition задан блок, то он вычисляется


11.1.10. Метод initialize_copy

Из книги автора

11.1.10. Метод initialize_copy При копировании объекта методом dup или clone конструктор не вызывается. Копируется вся информация о состоянии.Но что делать, если вам такое поведение не нужно? Рассмотрим пример:class Document attr_accessor :title, :text attr_reader :timestamp def initialize(title, text)  @title, @text = title, text  @timestamp =


11.1.11. Метод allocate

Из книги автора

11.1.11. Метод allocate Редко, но бывает, что нужно создать объект, не вызывая его конструктор (в обход метода initialize). Например, может статься, что состояние объекта полностью определяется методами доступа к нему; тогда не нужно вызывать метод new (который вызовет initialize), разве что вы


11.3.5. Метод define_method

Из книги автора

11.3.5. Метод define_method Помимо ключевого слова def, единственный нормальный способ добавить метод в класс или объект — воспользоваться методом define_method, причем он позволяет сделать это во время выполнения.Конечно, в Ruby практически все происходит во время выполнения. Если


11.3.6. Метод const_missing

Из книги автора

11.3.6. Метод const_missing Метод const_missing аналогичен методу method_missing. При попытке обратиться к неизвестной константе вызывается этот метод — если он, конечно, определен. В качестве параметра ему передается символ, ссылающийся на константу.Чтобы перехватывать обращения к


Метод Lockbits

Из книги автора

Метод Lockbits В .NET Compact Framework 2.0 появилась ограниченная поддержка метода LockBits, при помощи которого можно манипулировать массивом пикселов изображения. Перечисление ImageLockMode в данном методе позволяет использовать значения ReadWrite, ReadOnly и WriteOnly. А перечисление PixelFormat поддерживает


Метод Zip

Из книги автора

Метод Zip Описание методовМетоды приведены для последовательности sequence of T. function Zip<TSecond,Res>(second: sequence of TSecond; resultSelector: (T,TSecond)->Res): sequence of Res; Объединяет две последовательности, используя указанную функцию, принимающую по одному элементу каждой последовательности и


Метод Contains

Из книги автора

Метод Contains Описание методовМетоды приведены для последовательности sequence of T. function Contains(value: T): boolean; Определяет, содержится ли указанный элемент в последовательности, используя компаратор проверки на равенство по умолчанию. function Contains(value: T; comparer: IEqualityComparer<T>): boolean;