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

私人只对 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_privateand bar_public_2,那么不要使用private,private :bar_private在定义之后使用bar_private

于 2011-06-30T23:26:33.403 回答