5

Ruby クラス定義内で、次のシナリオにおける private キーワードのスコープは何ですか:

class Foo

  def bar_public
    puts "public"
  end

private
  def bar_private
    puts "private"
  end

  def bar_public_2
    puts "another public"
  end

end

private は bar_private でのみ機能しますか? またはbar_public_2でも?

4

2 に答える 2

8

あなたの場合、両方ともbar_private非公開bar_public_2です。

これは、両方のメソッドがprivateキーワードの「スコープ内」にあるためです。

> f = Foo.new
#<Foo:0xf1c770>
> Foo.new.bar_private
NoMethodError: private method 'bar_private' called for #<Foo:0xf1c770>
> Foo.new.bar_public_2
NoMethodError: private method 'bar_public_2' called for #<Foo:0xf1c770>

いずれにせよ、あなたの質問に答える最善の方法は、IRB を開いて試してみることです ;-)

于 2011-06-30T18:17:29.747 に答える
4

と の両方にprivate影響しているのがおかしいと思う場合は、 を使用するのではなく、を定義した後に使用してください。bar_privatebar_public_2privateprivate :bar_privatebar_private

于 2011-06-30T23:26:33.403 に答える