Поиск…


Требовать загрузки файлов только один раз

Ядро # требует метода будет загружать файлы только один раз (несколько вызовов require , чтобы код в этом файле оценивался только один раз). Он будет искать ваш ruby $LOAD_PATH чтобы найти нужный файл, если параметр не является абсолютным путем. Расширения, такие как .rb , .so , .o или .dll являются необязательными. Относительные пути будут разрешены к текущему рабочему каталогу процесса.

require 'awesome_print'

Ядро # require_relative позволяет загружать файлы по отношению к файлу, в котором вызывается require_relative .

# will search in directory myproj relative to current source file.
#
require_relative 'myproj/version'  

Автоматическая загрузка исходных файлов

Метод Kernel#autoload регистрирует имя файла для загрузки (используя Kernel::require ) при первом доступе к модулю (который может быть строкой или символом).

autoload :MyModule, '/usr/local/lib/modules/my_module.rb' 

Метод Kernel # autoload? возвращает имя файла для загрузки, если имя зарегистрировано как autoload .

autoload? :MyModule  #=> '/usr/local/lib/modules/my_module.rb'

Загрузка дополнительных файлов

Когда файлы недоступны, семейство require вызовет LoadError . Это пример, иллюстрирующий загрузку дополнительных модулей только в том случае, если они существуют.

module TidBits

@@unavailableModules = []

[
      { name: 'CoreExtend', file: 'core_extend/lib/core_extend'  } \
    , { name: 'Fs'        , file: 'fs/lib/fs'                    } \
    , { name: 'Options'   , file: 'options/lib/options'          } \
    , { name: 'Susu'      , file: 'susu/lib/susu'                } \

].each do |lib|

    begin

        require_relative lib[ :file ]

    rescue LoadError

        @@unavailableModules.push lib

    end

end

end # module TidBits

Повторная загрузка файлов

Метод загрузки Kernel # будет оценивать код в данном файле. Путь поиска будет построен так же, как и в случае require . Он будет переоценивать этот код при каждом последующем вызове в отличие от require . Нет load_relative .

load `somefile`

Загрузка нескольких файлов

Вы можете использовать любую рубиновую технику для динамического создания списка загружаемых файлов. Иллюстрация globbing для файлов, начинающихся с test , загруженных в алфавитном порядке.

Dir[ "#{ __dir__ }**/test*.rb" ) ].sort.each do |source|

    require_relative source

end


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow