如何取得定义类Ruby metaclass
创始人
2024-06-16 13:01:22
0

大家通过对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. => # 
  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 可以他们都是一个东西。
即 p.class == p2.class == Person 都为Person的Ruby metaclass。

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...
《非诚勿扰》红人闫凤娇被曝厕所... 【51CTO.com 综合消息360安全专家提醒说,“闫凤娇”、“非诚勿扰”已经被黑客盯上成为了“木...