成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

如何取得定義類Ruby metaclass

開發 開發工具
Ruby metaclass是一個特殊的類,它描述的不是一個具體的東西,而是另外一個類。看起來還是比較難以理解,我們就通過一段簡單的例子來看看它的含義。

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

1 對象存儲數據,類存儲方法。就是說,對象保存屬于這個對象的數據,這樣每個對象間的數據是獨立的,各有各的存儲空間,方法在內存中只有一份,就是由類保存。

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

當Ruby 處理下面代碼后,我們得到Person對象,它是Class類的實例

 

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

 

Class 也是一個對象,那么上面說對象中只存儲數據,那么又如何解釋呢?

只有查看Ruby的源代碼,ruby是用C語言寫的,里面的對象簡單來說就是一些數據結構。

對于Class的對象,有一個m_tbl成員,從名字可見是一個方法表。可見Class對象要比一般的對象特別。

 

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

 

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

 

  1. irb(main):003:0> Person.object_id 
  2. => -604423968  
  3. irb(main):004:0> p = Person.new 
  4. => #<Person:0xb7f1cb08> 
  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. => #<Person:0xb7ef6944> 
  16. irb(main):012:0> p2.class.object_id 
  17. => -604423968 

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

責任編輯:曹凱 來源: 博客園
相關推薦

2016-10-25 14:27:32

metaclasspython

2016-09-06 19:32:11

PythonWeb

2009-12-15 14:09:39

Ruby創建可參數化類

2009-12-16 13:53:51

Ruby多繼承

2009-12-15 14:46:04

Ruby類常量

2010-01-18 17:07:52

C++類

2009-12-18 17:20:00

Ruby核心類

2015-10-10 11:00:05

RubyRails性能

2015-10-14 17:27:18

性能

2009-12-18 16:00:29

Ruby獲取當前類名

2009-12-16 09:43:35

Ruby父類Objec

2010-03-05 13:40:29

Android Vie

2022-05-20 12:40:23

PythonMetaclass

2009-12-18 11:22:34

Ruby source

2009-12-14 10:32:26

Ruby Gnome

2009-12-15 13:41:49

Ruby向對象發送消息

2009-12-14 15:37:35

Ruby on Rai

2010-01-11 17:49:36

VB.NET硬盤序列號

2024-04-09 08:41:41

JVM類加載Java

2009-12-17 11:36:55

Ruby輸入輸出
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 粉嫩国产精品一区二区在线观看 | 中国免费黄色片 | 亚洲入口 | 国产成人久久av免费高清密臂 | 国产99久久精品一区二区300 | 黄视频免费观看 | 免费激情 | 亚洲精品美女 | 国产在视频一区二区三区吞精 | 欧美一级免费看 | 国产在线视频一区 | a视频在线观看 | 久久久精品日本 | 免费观看毛片 | 中文字幕国产视频 | 91久久精品国产 | 最新国产精品精品视频 | 日韩aⅴ在线观看 | 国产黄色小视频在线观看 | 中文字幕动漫成人 | 免费在线观看av网址 | 国产一区二区三区精品久久久 | 日韩视频在线一区 | 亚洲 欧美 另类 日韩 | 久久综合色综合 | 成人在线一区二区 | 中文字幕视频在线观看 | 日韩一区二区三区在线看 | 国产精品久久久久久久久久 | 一区二区三区欧美 | 欧美日韩一区在线播放 | 亚洲91精品 | 一级做a爰片性色毛片 | 国产成人在线观看免费 | 久久影音先锋 | 欧美黄在线观看 | 国产精品视频网站 | 精品久久久久久久久久久久 | 婷婷久久五月天 | 久久久久成人精品免费播放动漫 | av夜夜操 |