これは機能していないようです:
class Test
private
define_method :private_method do
"uh!"
end
end
puts Test.new.private_method
これは機能していないようです:
class Test
private
define_method :private_method do
"uh!"
end
end
puts Test.new.private_method
Test.instance_eval { private :private_method }
または、実行するだけです
private :private_method
Test
クラス内から。
Ruby 2.1以降、以下をdefine_method
尊重しているよう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!
(これは古い質問だと思いますが、Google経由で偶然見つけました。)
Module#private
メソッド名のオプションの引数を取ります。
class Test
private :private_method
end
上記はもちろん同等です
Test.private :private_method # doesn't work
それがプライベートであることを除いてModule#private
、アクセス制限を回避するためにリフレクションを使用する必要があります。
Test.send :private, :private_method
必要ありませんeval
。