在 Ruby 中取消定义方法非常简单,我可以使用undef METHOD_NAME
.
有类似的班级吗?我在MRI 1.9.2
.
我必须取消定义 ActiveRecord 模型,运行两行代码,然后将模型恢复到其原始形式。
问题是,我有一个模型Contact
我正在使用一家公司的 API,碰巧他们有一些名为Contact
,更改我的型号名称对我来说会是很多工作。
在这种情况下我能做什么?
class Foo; end
# => nil
Object.constants.include?(:Foo)
# => true
Object.send(:remove_const, :Foo)
# => Foo
Object.constants.include?(:Foo)
# => false
Foo
# NameError: uninitialized constant Foo
EDIT刚刚注意到您的编辑,删除常量可能不是实现您正在寻找的内容的最佳方法。为什么不只移动其中之一Contact
类放到单独的命名空间中。
EDIT2您还可以像这样暂时重命名您的班级:
class Foo
def bar
'here'
end
end
TemporaryFoo = Foo
Object.send(:remove_const, :Foo)
# do some stuff
Foo = TemporaryFoo
Foo.new.bar #=> "here"
再说一遍,这样做的问题是你仍然会拥有更新的Contact
类,所以你必须再次删除它。我真的建议您在类中设置名称间距。这也将帮助您避免任何加载问题
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)