Перезагрузить рубыгем в ИРБ - PullRequest
19 голосов
/ 12 августа 2010

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

Ответы [ 3 ]

17 голосов
/ 12 августа 2010

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

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

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

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

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

8 голосов
/ 12 августа 2010

load 'filename.rb'

по одному для каждого, который был изменен ...

6 голосов
/ 12 августа 2010

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

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

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

...