2010-09-23 6 views

Antwort

30
Test.instance_eval { private :private_method } 

Oder laufen nur

private :private_method 

aus der Test Klasse.

+0

, die einfach war, danke ! : D – knoopx

7

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.

8

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.)

Verwandte Themen