Область частного, защищенного и общественного - PullRequest
5 голосов
/ 30 июня 2011

В определении класса 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 тоже?

Ответы [ 2 ]

8 голосов
/ 30 июня 2011

В вашем случае 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 и попробовать его; -)

4 голосов
/ 01 июля 2011

Если вам покажется странным, что private влияет как на bar_private, так и bar_public_2, то вместо использования private используйте private :bar_private после определения bar_private.

...