12

これは機能していないようです:

class Test
  private

  define_method :private_method do 
    "uh!"
  end
end

puts Test.new.private_method
4

3 に答える 3

35
Test.instance_eval { private :private_method }

または、実行するだけです

private :private_method

Testクラス内から。

于 2010-09-23T19:57:10.893 に答える
10

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経由で偶然見つけました。)

于 2014-05-16T17:17:32.913 に答える
7

Module#privateメソッド名のオプションの引数を取ります。

class Test
 private :private_method
end

上記はもちろん同等です

Test.private :private_method # doesn't work

それがプライベートであることを除いてModule#private、アクセス制限を回避するためにリフレクションを使用する必要があります。

Test.send :private, :private_method

必要ありませんeval

于 2010-09-23T21:12:29.703 に答える