日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
如何取得定義類Rubymetaclass

大家通過對Ruby語言的深入學(xué)習(xí)可以清楚的知道,它是一款完全面向?qū)ο蟮哪_本語言。對于程序員來說,對象是屬于世間萬物的。那么類呢?在這里我們就為大家講解一下Ruby metaclass這個(gè)定義類的具體含義。#t#

1 對象存儲數(shù)據(jù),類存儲方法。就是說,對象保存屬于這個(gè)對象的數(shù)據(jù),這樣每個(gè)對象間的數(shù)據(jù)是獨(dú)立的,各有各的存儲空間,方法在內(nèi)存中只有一份,就是由類保存。

2 什么是Ruby metaclass,簡單來說就是,首先他是一個(gè)類,他是一個(gè)特殊的類,他描述的不是人,也不是飛機(jī),是另外的一個(gè)類。

當(dāng)Ruby 處理下面代碼后,我們得到Person對象,它是Class類的實(shí)例

 
 
 
  1. class Person
  2. attr_accessor :age,:name
  3. def initialize(age,name)
  4. @namename = name
  5. @ageage = age
  6. end
  7. end

Class 也是一個(gè)對象,那么上面說對象中只存儲數(shù)據(jù),那么又如何解釋呢?

只有查看Ruby的源代碼,ruby是用C語言寫的,里面的對象簡單來說就是一些數(shù)據(jù)結(jié)構(gòu)。

對于Class的對象,有一個(gè)m_tbl成員,從名字可見是一個(gè)方法表??梢奀lass對象要比一般的對象特別。

 
 
 
  1. struct RObject {
  2. struct RBasic basic;
  3. struct st_table *iv_tbl;
  4. };
  5. struct RClass {
  6. struct RBasic basic;
  7. struct st_table *iv_tbl;
  8. struct st_table *m_tbl;
  9. VALUE super;
  10. };

3 如何取得定義類的Ruby metaclass呢?最簡單的兩個(gè)方法,類名即是這個(gè)Class的metaclass.也可以能過類實(shí)例的.class方法。

 
 
 
  1. irb(main):003:0> Person.object_id
  2. => -604423968
  3. irb(main):004:0> p = Person.new
  4. => #
  5. irb(main):006:0> p.class.class
  6. => Class
  7. irb(main):007:0> p.class.class.object_id
  8. => -604330368
  9. irb(main):008:0> p.class.object_id
  10. => -604423968
  11. irb(main):009:0> p.class.inspect
  12. => "Person"
  13. irb(main):010:0> p.object_id
  14. irb(main):011:0> p2 = Person.new
  15. => #
  16. irb(main):012:0> p2.class.object_id
  17. => -604423968

如代碼所示 Person.object_id == p.class.object_id == p2.class.object_id 可以他們都是一個(gè)東西。
即 p.class == p2.class == Person 都為Person的Ruby metaclass。


網(wǎng)頁標(biāo)題:如何取得定義類Rubymetaclass
轉(zhuǎn)載注明:http://m.5511xx.com/article/dhjhodh.html