2

次のコードはNoMethodError. 理由がわかりません。私が呼び出しているメソッドはプライベートですが、クラス内から呼び出しています.クラス変数はプライベート変数/関数にアクセスできませんか?. Javaでこれを行うことができました。

class Tester
 private
   def func_pri
     puts("From a private function")
   end

 protected 
  def func_prot
    puts("From a protected function")
  end

 public
  def func_pub
     puts("From a public function")
  end

 public
  def caller(object)
    object.func_pub
    object.func_pri # This statement causes error
    object.func_prot
  end
 end

 o = Tester.new
 o.caller(o)
4

1 に答える 1

5

でさえ、オブジェクトでプライベート メソッドを呼び出すことはできませんself。部品を取り外すとobject.、通話が続行されselfます。

プライベート メソッドを呼び出したい場合は、いつでも を使用できますobject.send(:func_pri)

これらの点で、Ruby は Java のような言語とはかなり異なります。詳細については、http://www.ruby-doc.org/docs/ProgrammingRuby/の「クラス、オブジェクト、および変数」の章の「アクセス制御」セクションを参照してください。

于 2012-06-14T06:50:46.227 に答える