1

次のコードを検討してください。

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のアクセスチェックを上書きできますか?助けてください!

4

1 に答える 1

4

Rubyのアクセスチェックを上書きしているようです。

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

私の推測では、あなたは他の人がプライベートにしたものでうまく遊びたいと思います。作成していないクラスのメソッドを呼び出すためにsendを使用する必要がある場合は、おそらく最初にobj.respond_toを呼び出す必要があります。

于 2009-07-24T12:59:21.147 に答える