Есть ли рубиновый эквивалент PHP spl_autload_register? - PullRequest
1 голос
/ 18 февраля 2011

В PHP я часто использую функцию spl_autoload_register. Это позволяет вам загружать классы по требованию, на которые они ссылаются. Есть ли способ сделать то же самое в Ruby?

Ответы [ 2 ]

2 голосов
/ 18 февраля 2011

В Ruby есть два механизма автозагрузки: явный и неявный.

Первый основан на методе autoload.Вы можете найти подробное описание здесь .

autoload :Command,            'thin/command'
autoload :Connection,         'thin/connection'
autoload :Daemonizable,       'thin/daemonizing

Второе основано на именах файлов.Предполагая, что путь /path/to/folder находится в вашем $LOAD_PATH, Ruby попытается загрузить файл, соответствующий нижнему регистру имени требуемого класса и подчеркиванию.

Например, когда вы впервые используете класс DefaultLoggerRuby попытается найти, если

/path/to/folder/default_logger.rb

существует и определяет Post.Если это так, файл будет загружен вместе с определением класса.Этот подход широко используется при создании драгоценных камней.

0 голосов
/ 19 марта 2011

Вы можете имитировать поведение PHP __autoload() (например, определить имя класса для algotithm имени файла и потребовать его), переопределив метод Object#const_missing, который вызывается, когда константа (например, имя класса) не найдена.

Вот пример.

(ОБНОВЛЕНИЕ: я обновил ссылку выше.)

...