Cela ne semble pas fonctionner:Comment définir dynamiquement une méthode comme privée?
class Test
private
define_method :private_method do
"uh!"
end
end
puts Test.new.private_method
Cela ne semble pas fonctionner:Comment définir dynamiquement une méthode comme privée?
class Test
private
define_method :private_method do
"uh!"
end
end
puts Test.new.private_method
Test.instance_eval { private :private_method }
Ou, il suffit d'exécuter
private :private_method
à partir de la classe Test
.
Module#private
prend un argument optionnel pour le nom de la méthode:
class Test
private :private_method
end
Ce qui précède est bien sûr équivalent à
Test.private :private_method # doesn't work
Sauf que Module#private
est privé, donc vous devez utiliser la réflexion pour contourner la restrictions d'accès:
Test.send :private, :private_method
Non eval
nécessaire.
Il semble qu'à partir de Ruby 2.1, define_method
respecte 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!
(Je sais que c'est une vieille question, mais je suis tombé sur via Google.)
qui était facile, merci ! :RÉ – knoopx