【发布时间】:2017-07-17 03:19:46
【问题描述】:
Ruby 2.1.7 和 Rails 4.0.2
在使用 rails 控制台时。我已经看到如果我在控制台中声明一个对象。比调用重载!然后使用创建另一个类的实例的代码调用同一对象上的方法将引发错误:
ArgumentError:First 的副本已从模块树中删除,但仍处于活动状态!
一个例子更容易理解:
在我的应用程序/模型文件夹中,我向类声明:
app/models/first.rb
class First
def foo
Second.new
end
end
app/models/second.rb
class Second
end
比我在控制台中运行的命令:
x = First.new
reload!
x.foo
我得到了例外
你能解释一下为什么会这样吗?使用在重新加载之前声明的引用是错误的吗?异常是一件好事,我不应该尝试找到解决方法,否则它表明我的代码或配置中有问题
我有这个问题:A copy of xxx has been removed from the module tree but is still active
一个解决方案是添加额外的 :: 作为前缀,如果我使用这个:
::Second.new
我没有得到异常
你认为使用这个解决方案是一件好事还是太hacky而不是Ruby Way?
你能解释一下为什么这不会导致错误吗?
【问题讨论】:
标签: ruby-on-rails