Dies scheint nicht zu funktionieren:Wie definiere ich eine Methode dynamisch als privat?
class Test
private
define_method :private_method do
"uh!"
end
end
puts Test.new.private_method
Dies scheint nicht zu funktionieren:Wie definiere ich eine Methode dynamisch als privat?
class Test
private
define_method :private_method do
"uh!"
end
end
puts Test.new.private_method
Test.instance_eval { private :private_method }
Oder laufen nur
private :private_method
aus der Test
Klasse.
Module#private
ein optionales Argument für den Methodenname:
class Test
private :private_method
end
Die oben ist natürlich äquivalent zu
Test.private :private_method # doesn't work
Außer dass Module#private
ist privat, so dass Sie Reflektion verwenden müssen die Umgehung Zugangsbeschränkungen:
Test.send :private, :private_method
Nein eval
erforderlich.
Es scheint, dass ausgehend von Ruby 2.1, define_method
Hinsicht 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!
(Ich weiß, das eine alte Frage, aber ich über es über Google passiert ist.)
, die einfach war, danke ! : D – knoopx