开发者

Scope of private, protected, and public

Within a Ruby class definition, what is the scopes of the private keyword in the following scenarios:

class Foo

  def bar_public
    puts "public"
  end

private
  def bar_private
    puts "private"
  end

开发者_StackOverflow中文版  def bar_public_2
    puts "another public"
  end

end

Does private only act on bar_private? or on bar_public_2 as well?


In your case both bar_private and bar_public_2 are private.

That is because both methods are "within scope" of the private keyword.

> 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>

Either way, the best way to answer you question is to open IRB and try it out ;-)


If you find it weird that private is affecting both bar_private and bar_public_2, then rather than use private, use private :bar_private after defining bar_private.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜