2016年4月10日 星期日

ruby object


  • ruby中,一切皆對象
  • 理解ruby對像模型
  • 了解ruby查找方法的方式

描述了Ruby中方法調用的過程,“向左一步進入該對象的類,然後沿著祖先鏈一直查找方法,找到方法之後,根據自身的綁定執行該方法”。 因此,對象本身只有一組綁定,而方法定義都是在類中。那麼上面說到的單件方法和類宏應該在什麼地方定義呢?單件方法肯定不能定義在類中,否則將會影響該類的所有實例對象。類本身也是對象,類的方法不能定義在自身,因為對象的方法必須定義在對象的類中,而類對象的類是Class,如果把類方法定義到Class上,那麼所有的類對像都會擁有該方法。這一切迷思的答案都來源於一個Ruby中的高級概念,Eigenclass Eigenclass在Ruby中,當調用obj.class向一個對象索要它的類的時候,編譯器並沒有告訴大家全部的真相,你得到的類並不是你看到的類,你得到的是一個對象特有的隱藏類,這就是該對象的Eigenclass,雖然Object#class方法想把關於Eigenclass的信息隱藏起來,但是,存在即存在,總會被人挖出來的。 



Eigenclass是一個類,但是是一個很特殊的類,它只能有一個實例,且不能被繼承,但是其自身可以繼承其它類。因此,所有的對像都有一個自己的Eigenclass,單件方法就定義在該對象的Eigenclass中,類宏定義在該類對象的Eigenclass中

為了區分普通類和Eigenclass,Ruby會使用“#"表明該類是一個Eigenclass。 
*一個實例對象的Eigenclass的父類是該對象的類 
*一個類對象的Eigenclass的父類是該類對象的父類的EigenClass。 


沒有留言:

張貼留言