no parece que esto funcione:¿Cómo defino dinámicamente un método como privado?
class Test
private
define_method :private_method do
"uh!"
end
end
puts Test.new.private_method
no parece que esto funcione:¿Cómo defino dinámicamente un método como privado?
class Test
private
define_method :private_method do
"uh!"
end
end
puts Test.new.private_method
Test.instance_eval { private :private_method }
O, basta con ejecutar
private :private_method
desde dentro de la clase Test
.
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
.
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.)
que era fácil, gracias ! :RE – knoopx