2010-09-23 11 views

Respuesta

30
Test.instance_eval { private :private_method } 

O, basta con ejecutar

private :private_method 

desde dentro de la clase Test.

+0

que era fácil, gracias ! :RE – knoopx

7

Module#private toma un argumento opcional para el nombre del método:

class Test 
private :private_method 
end 

Lo anterior es, por supuesto, equivalente a

Test.private :private_method # doesn't work 

Excepto que Module#private es privada, así que hay que utilizar la reflexión para eludir la restricciones de acceso:

Test.send :private, :private_method 

No es necesario eval.

8

Parece que a partir de Rubí 2.1, define_method aspectos 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! 

(Me di cuenta que es una vieja pregunta, pero me pasó a través de ella a través de Google.)

Cuestiones relacionadas