如果您更改文件然后在 pry 或 irb 中重新加载它,它似乎会选择您添加到该类的任何新功能,但不会忘记您从该类中删除的旧功能。
重现步骤:
say_hello.load 'my_class.rb'say_goodbyeload 'my_class.rb'您现在可以使用这两种方法。我明白为什么会发生这种情况 - 因为 ruby 允许您重新打开类进行修改,重新加载文件基本上只是重新打开您已经加载的类的现有版本,而不是擦除该类的内存并定义从头再来上课。
我的问题是,除了退出并重新启动 PRY 或 IRB 之外,您如何解决这个问题?你怎么说“完全忘记我以前的课并从头开始重新加载这个文件”?
谢谢!
您可以使用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)