Лучший способ потребовать всех файлов от каталога в рубине?

Так как я открываю окно / вкладку, не используя window.open, так. Я могу закрыть определенную вкладку с помощью TabID, используя программно

339
задан Gaetan Dubar 9 April 2009 в 06:00
поделиться

5 ответов

Как насчет:

Dir["/path/to/directory/*.rb"].each {|file| require file }
449
ответ дан JasonSmith 23 November 2019 в 00:36
поделиться

Лучший способ - добавить каталог в путь загрузки, а затем потребовать базовое имя каждый файл. Это потому, что вы хотите избежать случайного запроса одного и того же файла дважды - часто это не является предполагаемым поведением. Будет ли файл загружен или нет, зависит от того, видел ли require путь, пройденный до него ранее. Например, этот простой сеанс irb показывает, что вы можете по ошибке потребовать и загрузить один и тот же файл дважды.

$ irb
irb(main):001:0> require 'test'
=> true
irb(main):002:0> require './test'
=> true
irb(main):003:0> require './test.rb'
=> false
irb(main):004:0> require 'test'
=> false

Обратите внимание, что первые две строки возвращают true , означая, что один и тот же файл загружался оба раза. Когда используются пути, даже если пути указывают на одно и то же местоположение, требуют, чтобы не знал, что файл уже был необходим.

Здесь вместо этого мы добавляем каталог в путь загрузки, а затем требуем базовое имя каждого файла * .rb внутри.

dir = "/path/to/directory"
$LOAD_PATH.unshift(dir)
Dir[File.join(dir, "*.rb")].each {|file| require File.basename(file) }

Если вам не нужно, чтобы файл требовался более одного раза, или вы просто хотите загрузить содержимое файла, возможно, следует использовать load вместо require ]. В этом случае используйте load, потому что она лучше отражает то, что вы пытаетесь выполнить. Например:

Dir["/path/to/directory/*.rb"].each {|file| load file }
30
ответ дан Ryan McGeary 23 November 2019 в 00:36
поделиться

Если это каталог, относящийся к файлу, который требует (например, вы хотите загрузить все файлы в каталоге lib ):

Dir[File.dirname(__FILE__) + '/lib/*.rb'].each {|file| require file }

Редактировать: На основе комментариев ниже обновленная версия:

Dir[File.join(__dir__, 'lib', '*.rb')].each { |file| require file }
337
ответ дан 23 November 2019 в 00:36
поделиться

Попробуйте гем require_all:

  1. http://github.com/jarmo/require_all
  2. https://rubygems.org/gems/require_all

Он позволяет вам просто :

require_all 'path/to/directory'
98
ответ дан 23 November 2019 в 00:36
поделиться
Dir[File.dirname(__FILE__) + '/../lib/*.rb'].each do |file| 
  require File.basename(file, File.extname(file))
end

Если вы не удалите расширение, вам может потребоваться один и тот же файл дважды (ruby не поймет, что «foo» и «foo. rb "- это тот же файл). Требование одного и того же файла дважды может привести к появлению ложных предупреждений (например, «предупреждение: уже инициализированная константа»).

52
ответ дан 23 November 2019 в 00:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: