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