Как динамически определить метод как закрытый? Это не работает: class Test private define_method :private_method do "uh!" end end puts Test.new.private_method Ответ 1 Test.instance_eval { private :private_method } Или просто запустите private :private_method из класса Test. Ответ 2 Кажется, что начиная с Ruby 2.1, define_method соответствует private: $ rvm 2.1.0 $ ruby /tmp/test.rb /tmp/test.rb:10:in `<main>': private method `private_method' called for #<Test:0x00000102014598> (NoMethodError) $ rvm 2.0 $ ruby /tmp/test.rb uh! (Я понимаю, что это старый вопрос, но я прошел через него через Google.) Ответ 3 Module#private принимает необязательный аргумент для имени метода: class Test private :private_method end Выше, конечно, эквивалентно Test.private :private_method # doesn't work За исключением того, что Module#private является закрытым, вы должны использовать отражение, чтобы обойти ограничения доступа: Test.send :private, :private_method Нет eval.
Ответ 1 Test.instance_eval { private :private_method } Или просто запустите private :private_method из класса Test.
Ответ 2 Кажется, что начиная с Ruby 2.1, define_method соответствует private: $ rvm 2.1.0 $ ruby /tmp/test.rb /tmp/test.rb:10:in `<main>': private method `private_method' called for #<Test:0x00000102014598> (NoMethodError) $ rvm 2.0 $ ruby /tmp/test.rb uh! (Я понимаю, что это старый вопрос, но я прошел через него через Google.)
Ответ 3 Module#private принимает необязательный аргумент для имени метода: class Test private :private_method end Выше, конечно, эквивалентно Test.private :private_method # doesn't work За исключением того, что Module#private является закрытым, вы должны использовать отражение, чтобы обойти ограничения доступа: Test.send :private, :private_method Нет eval.