Send разрешает доступ к приватным переменным - PullRequest
1 голос
/ 24 июля 2009

Рассмотрим следующий код:

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

? Не имеет смысла для меня ... может ли "отправить" переопределить проверки доступа Руби? Пожалуйста, помогите!

1 Ответ

4 голосов
/ 24 июля 2009

Похоже, что он отменяет проверки доступа Ruby.

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

Полагаю, вы хотели бы поиграть с вещами, которые другие люди сделали приватными. Если вам нужно использовать методы send to call класса, который вы не создали, вам, вероятно, следует сначала вызвать obj.respond_to .

...