在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上?
答案 0 :(得分: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并尝试一下; - )
答案 1 :(得分:4)
如果您发现private
同时影响bar_private
和bar_public_2
,而不是使用private
,那么在定义{{1}后使用private :bar_private
会很奇怪}}