2011-06-30 86 views
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上?

回答

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和嘗試;-)

+3

+1 for *「Just try it!」* =) –

+0

@Ed:「試試看」是一種很容易被意外和不確定行爲糾纏的好方法。通過實驗編程通常是一個壞主意。 –

+2

@mu'%s /編程/設計' - 編程是*所有關於*實驗的。 – Jeremy

4

如果你覺得奇怪的是private是影響雙方bar_privatebar_public_2,然後而不是使用private,在定義bar_private後使用private :bar_private

相關問題