Существует ли способ "перезагрузить" или "обновить" rubygem в памяти? Поскольку я играю в irb, иногда мне нравится изменять мои файлы драгоценного камня, и если я требую того же драгоценного камня, он не обновляет в память и дает выводу "ложь". В настоящее время я должен выйти из IRB, возвратиться в IRB и затем потребовать драгоценного камня снова, должен быть лучший путь..., что это?
Как предлагали другие, вы можете использовать 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
Выберите то, что вам подходит. Лично я пользуюсь последним.
Один из способов - использовать Kernel # load
. Вы можете использовать его примерно так же, как Kernel # require
, за исключением того, что вы должны явно указать расширение файла. Однако у него есть свои недостатки (даже такая простая вещь, как class Foo
В рельсах этого можно добиться с помощью reload!
в скрипте / консоли, но я не знаю, какую магию они используют.
Эта суть выглядит многообещающей, но я ее не тестировал.
загружать 'filename.rb'
по одному для каждого измененного ...