1

私は何かを逃していますか?

class Circus
  private
  def start
    puts 'And now for something completely different..'
  end
end

そして私の幻滅のために:

c=Circus.new
c.start               #NoMethodError: private method `start' called
c.method(:start).call #no problem at all
c.send :start        #neither this fails

Ruby にプライベート メソッドが存在する理由を誰か教えてもらえますか?

4

4 に答える 4

0

プライベート メソッドは、明示的なレシーバーなしで、同じインスタンス内からのみ呼び出されることになっています。self.some_private_method同じインスタンスから呼び出された場合を含め、明示的なレシーバーが提供されるたびに失敗します。このビアをバイパスする機能sendは非標準のコーディング方法であり、主にメンテナンスのために使用する必要があります。

于 2013-06-13T13:29:02.743 に答える