发送允许访问私有变量

时间:2009-07-24 12:56:41

标签: ruby metaprogramming access-specifier

请考虑以下代码:

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的访问检查吗?请帮忙!

1 个答案:

答案 0 :(得分:4)

它看起来确实覆盖了Ruby的访问检查。

http://joshstaiger.org/archives/2006/12/the_ruby_send_h.html

我的猜测是,你希望与其他人私有化的东西很好地搭配。如果你需要使用send来调用你没有创建的类的方法,你应该首先在它上面调用obj.respond_to