Требовать каталог lib в консоли irb

Есть ли способ, как require все файлы в lib каталоге одновременно в irb консоли ?:

irb ( project root )
require './lib/' # not working  

структура

.
|
--lib 
  |
  |-- one.rb
  |-- two.rb
  |-- tree.rb

ИЗМЕНИТЬ

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


person Community    schedule 07.03.2014    source источник
comment
Пожалуйста, сделайте require_relative './lib/one.rb', require_relative './lib/two.rb' и require_relative './lib/three.rb'   -  person Arup Rakshit    schedule 07.03.2014
comment
прочтите это - stackoverflow.com/questions/3672586/   -  person Arup Rakshit    schedule 07.03.2014
comment
@ArupRakshit скажем, я работаю с 5 файлами ... это слишком много печатать ... предпочитаю решение, где я могу потребовать их один раз.   -  person    schedule 08.03.2014
comment
Да ... см. ответ ..   -  person Arup Rakshit    schedule 08.03.2014
comment
@ArupRakshit, когда вы выходите из сеанса irb и возвращаетесь, вам нужно сделать это снова ... предпочитаю решение sawa - см. Мой комментарий в его ответе, пожалуйста.   -  person    schedule 08.03.2014
comment
Хорошо ... Выберите то, что вам нужно.   -  person Arup Rakshit    schedule 08.03.2014


Ответы (3)


Создайте файл с именем .irbrc в своем домашнем каталоге и напишите require команды для любого файла, который вам нужен там. Когда вы запустите irb, будет загружено .irbrc.

person sawa    schedule 07.03.2014
comment
Разве вопрос не в том, какие команды нужно использовать, чтобы требовать все в папке? - person Gareth; 07.03.2014
comment
Я так не думаю. Я думаю, что OP хочет способ легко потребовать несколько файлов (которые находятся в одном каталоге) при запуске irb (будь то автоматический или ручной). Я предлагаю автоматический способ. - person sawa; 07.03.2014
comment
Неисправный код, который они используют, показывает require, вызываемый с папкой (что не работает). Они упоминают irb, но не упоминают запуск. - person Gareth; 07.03.2014
comment
Это первая строка после команды irb. И даже если бы OP не просил сделать это при запуске, какая разница? Вы думаете, что время выполнения require имеет значение, и OP должен что-то сделать в irb перед загрузкой файлов? - person sawa; 07.03.2014
comment
Я подумал, что это было просто потому, что это был пример. Что они должны были поставить вместо этого? В любом случае, думаю, придется подождать пока будет выбран ответ :) - person Gareth; 07.03.2014
comment
Вы думаете, что OP должен что-то сделать в irb перед загрузкой файлов - Нет, но то, что мне требуются определенные файлы, когда я работаю над одним проектом, не означает, что они мне нужны каждый раз, когда я захожу в irb - person Gareth; 07.03.2014
comment
@sawa создал .irbrc в домашнем каталоге и написал там require '. / lib / one.rb`, пробовал также без rb ... но он не работает ... Что мне там не хватает? Кстати, мне нравится это решение, и я приму ваш ответ, когда он заработает. - person ; 08.03.2014
comment
@ etmo999 Из вашего комментария я не могу сказать, каким образом это не работает. Попробуйте puts "foo" в первой строке .irbrc и посмотрите, работает ли он. Если это не так, значит, с вашим путем IRBRC что-то не так. Если он отображается, но файл require-d не работает, значит, ваш путь ./lib/one.rb неверен. - person sawa; 09.03.2014
comment
@ etmo999 Я снова увидел вашу структуру каталогов. Ваш путь неправильный. Сделай Dir["./lib/*"].each{|f| require(f)}. - person sawa; 09.03.2014
comment
Итак, в конце концов проблема заключалась в том, как файлы должны быть востребованы. Точно так же, как и другой ответ - person Gareth; 11.03.2014
comment
@Gareth Если вы хотите каждый раз вводить команду Dir["./lib/*"].each{|f| require(f)} в irb, примите другой ответ. Смысл моего ответа, а также того, как я интерпретировал то, что вы хотите сделать, состоял в том, чтобы не вводить это каждый раз в irb. - person sawa; 11.03.2014

Как описано в документации require ( и require_relative) не могут принимать имя каталога в качестве аргумента, только одно имя файла. Вы можете написать что-то вроде следующего, чтобы делать то, что хотите:

Dir['./lib/*.rb'].each { |f| require_relative(f) }
person toro2k    schedule 07.03.2014
comment
Я не знаю, почему за это проголосовали против, это точно отвечает на вопрос. - person Gareth; 07.03.2014
comment
Я не сторонник отрицательных отзывов, но не думаю, что практично вводить это каждый раз в irb. Кроме того, f уже является абсолютным путем, поэтому require будет достаточно, если у вас нет мыслей о том, что require_relative следует постоянно использовать для захвата require (с чем я не спорю). - person sawa; 07.03.2014
comment
@sawa Очевидно, что если OP должен запрашивать файлы каждый раз, когда он запускает irb, мой ответ - не вариант. Что касается использования require_relative: я использую его, чтобы запрашивать файлы из каталогов, которых нет в $:. Вы должны возразить против постоянной замены require_relative на require, потому что это просто не работает, например, используя require_relative, вы не можете загружать файлы из драгоценных камней. - person toro2k; 07.03.2014

Вы можете использовать это

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