PRY 或 IRB - 重新加载类并忘记已删除的功能

jos*_*ing 3 ruby irb pry

如果您更改文件然后在 pry 或 irb 中重新加载它,它似乎会选择您添加到该类的任何新功能,但不会忘记您从该类中删除的旧功能。

重现步骤:

  1. 使用单个方法创建一个类 - 例如。say_hello.
  2. 打开 PRY 或 IRB,然后 load 'my_class.rb'
  3. 编辑您的类 - 删除现有方法,并添加一个具有不同名称的新方法 - 例如。 say_goodbye
  4. 重新加载您的课程 - load 'my_class.rb'

您现在可以使用这两种方法。我明白为什么会发生这种情况 - 因为 ruby​​ 允许您重新打开类进行修改,重新加载文件基本上只是重新打开您已经加载的类的现有版本,而不是擦除该类的内存并定义从头再来上课。

我的问题是,除了退出并重新启动 PRY 或 IRB 之外,您如何解决这个问题?你怎么说“完全忘记我以前的课并从头开始重新加载这个文件”?

谢谢!

Uri*_*ssi 5

您可以使用remove_const从其父级中删除该类,无论是从Module它所在的位置:

My::Module.send(:remove_const, :MyClass)
Run Code Online (Sandbox Code Playgroud)

或者Object如果它没有在模块中声明:

Object.send(:remove_const, :MyClass)
Run Code Online (Sandbox Code Playgroud)