代码之家  ›  专栏  ›  技术社区  ›  Schneems

在IRB中重新加载rubygem

  •  19
  • Schneems  · 技术社区  · 16 年前

    有没有办法“重新加载”或“刷新”内存中的rubygem?当我在irb中玩的时候,偶尔我喜欢修改gem文件,如果我需要相同的gem,它不会更新到内存中,并给出“false”输出。目前我必须退出IRB,回到IRB,然后再要求创业板,必须有一个更好的办法…这是什么?

    3 回复  |  直到 16 年前
        1
  •  17
  •   Aaron Brager    9 年前

    正如其他人所建议的,您可以使用Kernel#load。但是,不要浪费时间查找和加载每个gem文件,因为所有需要的文件都存储在$”中。有了这些知识,这里有一个重新加载irb命令:

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

    例如,如果您在irb中使用hirb gem,只需使用以下内容重新加载:

    >> reload 'hirb'
    

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

    挑一个适合你的。就我个人而言,我使用后者。

        2
  •  8
  •   rogerdpack    16 年前

    加载“filename.rb”

        3
  •  6
  •   sluukkonen    16 年前

    一种方法是使用 Kernel#load . 你可以像这样使用它 Kernel#require ,但必须显式包含文件扩展名。然而,它也有它的缺点(甚至像 class Foo < Struct.new(:foo); end

    在rails中,您可以通过 reload! 在脚本/控制台上,但我不知道他们使用什么样的魔法。

    This gist 看起来很有希望,但我还没试过。

    推荐文章