私人,受保护和公共的范围

时间:2011-06-30 18:02:25

标签: ruby access-specifier

在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 个答案:

答案 0 :(得分:8)

在您的情况下,bar_privatebar_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并尝试一下; - )

答案 1 :(得分:4)

如果您发现private同时影响bar_privatebar_public_2,而不是使用private,那么在定义{{1}后使用private :bar_private会很奇怪}}