Подтвердить что ты не робот

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

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

4b9b3361

Ответ 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/, но я не знаю, какую магию они используют.

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