2013-03-18 79 views
0

如果我在Object類(定義爲private)中定義一個方法,我可以從另一個類中調用它嗎?我的意思是,當我從Dog類中調用say_hello時,如果say_hello是頂級定義的方法並且因此對於Object類是私有的,它將如何解決?我知道Object類是在所有類的方法查找中,但是如果方法是私有的,它不應該是正確的?頂級方法可以從Ruby的另一個類訪問?

def say_hello 
    p "Hello" 
end 
class Dog 
    def test_hello 
    say_hello 
    end 
end 

prova = Dog.new 
prova.test_hello 

我想我的懷疑更容易的解釋是:爲什麼我可以調用一個孩子的父母的私人方法?

class Animal 
    private 
    def prova 
    p "hello" 
    end 
end 
class Dog < Animal 
    def test_hello 
    prova 
    end 
end 

prova = Dog.new 
prova.test_hello 

回答

0

還記得ObjectDog繼承,賦予其訪問Object小號的方法。你可以擴展所有你想要的對象類。

見回答:How to extend class Object in Rails?

+1

我不知道在Ruby中,擴展類可以訪問其父項的私有方法... – 2013-03-18 23:19:34

0

但如果方法是私有的它不應該容易吧?

是什麼讓你覺得呢?

私有方法只能用隱式接收方來調用。你與隱式接收器調用它。埃爾戈,它應該工作......並且它確實如此。

相關問題