请考虑以下代码:
def create_class(class_name, superclass, &block)
klass = Class.new superclass, &block
Object.const_set class_name, klass
end
我做完之后:
create_class('User', ActiveRecord::Base)
以下是好的:
Object.send(:remove_const, :User)
但是这个:
Object.remove_const :User
结果如下:
NoMethodError: private method `remove_const' called for Object:Class
?对我来说没有意义......可以'发送'覆盖Ruby的访问检查吗?请帮忙!
答案 0 :(得分:4)
它看起来确实覆盖了Ruby的访问检查。
http://joshstaiger.org/archives/2006/12/the_ruby_send_h.html
我的猜测是,你希望与其他人私有化的东西很好地搭配。如果你需要使用send来调用你没有创建的类的方法,你应该首先在它上面调用obj.respond_to。