Перезагрузите rubygem в IRB

Существует ли способ "перезагрузить" или "обновить" rubygem в памяти? Поскольку я играю в irb, иногда мне нравится изменять мои файлы драгоценного камня, и если я требую того же драгоценного камня, он не обновляет в память и дает выводу "ложь". В настоящее время я должен выйти из IRB, возвратиться в IRB и затем потребовать драгоценного камня снова, должен быть лучший путь..., что это?

20
задан Schneems 11 August 2010 в 21:58
поделиться

3 ответа

Как предлагали другие, вы можете использовать Kernel # load. Однако не тратьте время на поиск и загрузку каждого файла драгоценного камня, так как все необходимые файлы хранятся в $ ". Вооружившись этими знаниями, вот команда reload irb:

 def reload(require_regex)
  $".grep(/^#{require_regex}/).each {|e| load(e) }
 end

Например, если вы использовали hirb gem в irb, вы можете просто перезагрузить его с помощью:

>> reload 'hirb'

Если по какой-либо причине загрузка не работает (это более требовательно к расширениям файлов, чем требуется), вы можете повторно запросить любой файл, сначала удалив его запись в $ ". С этим советом приведенная выше команда будет выглядеть так:

 def reload(require_regex)
   $".grep(/^#{require_regex}/).each {|e| $".delete(e) && require(e) }
 end

Выберите то, что вам подходит. Лично я пользуюсь последним.

17
ответ дан 30 November 2019 в 00:31
поделиться

Один из способов - использовать Kernel # load . Вы можете использовать его примерно так же, как Kernel # require , за исключением того, что вы должны явно указать расширение файла. Однако у него есть свои недостатки (даже такая простая вещь, как class Foo не работает, поскольку невозможно изменить суперкласс класса), поэтому я бы также хотелось бы знать, как это сделать получше.

В рельсах этого можно добиться с помощью reload! в скрипте / консоли, но я не знаю, какую магию они используют.

Эта суть выглядит многообещающей, но я ее не тестировал.

6
ответ дан 30 November 2019 в 00:31
поделиться

загружать 'filename.rb'

по одному для каждого измененного ...

8
ответ дан 30 November 2019 в 00:31
поделиться
Другие вопросы по тегам:

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