Ruby世界中,万物皆对象. 用Ruby"写作"时, 书写下"名词", 对这些"名词"进行修辞: 用"形容词(修饰性的名词)"丰富它们, 用"动词"让它们活泼.用OO语言来说, "对象可以拥有属性, 并响应消息".
我们知道如何用Ruby的OO语法创建类并实例化对象.但这一切是如何用C语言实现的呢?简单的说, Ruby世界中任何对象都对应C语言中的某个"变量", 而所有这些变量的类型由一些结构体(Struct)定义. 对象可修饰,可操作都是源于这些结构体.
那么来看下C中Ruby对象所对应的结构体(即所谓Ruby对象所对应的'C类', 对象类)有哪些:
# struct RObject 下面之外的所有东西
# struct RClass 类对象
# struct RFloat 小数
# struct RString 字符串
# struct RArray 数组
# struct RRegexp 正则表达式
# struct RHash hash表
# struct RFile IO, File, Socket等等
# struct RData 所有定义在C层次上的类,除了上面提到的。
# struct RStruct Ruby的Struct类
# struct RBignum 大的整数
除了RObject, RClass, RData, RStruct外, 其它的对象类都很好理解, 例如RString这个结构体就表示了Ruby中的String类.
呵呵, 可能你也发现了错误, 是的, 在Ruby的C实现中,RString类型的变量代表Ruby中String类的实例, 但RString这个类型, 却不代表String这个Ruby类.
到此,你可能会有这样的疑问: 为什么RString类型的变量对应Ruby对象, RString却不是Ruby对象的类型---Ruby类, 的对应呢? 什么样的C结构才是Ruby类所对应的呢?
第一个问题, 万物皆对象, Ruby类也是一种对象, 换句话说, 你可以在运行时操纵Ruby类, 它可以像普通对象那样, 编辑属性, 接受消息.因此, 如果用C的类型(Struct)和变量直接对应Ruby的类和实例是不妥当的:你无法在运行时操纵C的类型(Struct)!
那么, Ruby类作为对象, 所对应的C结构体('类'对象类)是什么呢? '类'对象是对象的一种, '类'对象类也应该是对象类的一种. 是的, 其实你已经看到了Ruby类作为对象,所对应的C结构体----RClass.
上述的对象类,并没有包含所有的Ruby对象, 例如小整数, 符号, true, false, nil.这方面的知识, 请参见C层面上"指向/引用"一切ruby对象的"指针"类型
VALUE.
一般意义上的Ruby对象, 在C层面上是一个对象类(除RClass)类型的变量, 那么它们在Ruby层面上响应它们的Ruby类所定义的那一套方法, 又是如何实现的呢? 换句话说, 对象类到底是如何既分离了Ruby对象的实现,又让它们具有Ruby层次上定义的类型(接口)呢?关于这一点, 请先参见
RBasic.
内建的Ruby类(String, Hash, 或Fixnum这种没有真正对象类的)和用户自定义的对象类在C层面上都是一个RClass类型的变量. 在Ruby层面, 不同的类定义不同的方法, 变量, 那么这一点是如何在C层面实现的呢? 请参见
RClass.
分享到:
相关推荐
MongoMapper是Ruby社区中用于MongoDB数据库的一种对象关系映射(ORM)框架,它为开发者提供了与MongoDB交互的简洁而强大的接口。MongoDB是一种非关系型数据库(NoSQL),以其灵活性、高可用性和高性能而受到青睐。...
1. **模型映射**:Her允许定义模型类,这些类与REST资源对应,提供了一种面向对象的方式来操作数据。例如,`class User 将User模型与API中的/users资源关联。 2. **关联关系**:Her支持关联模型,如一对一、一对多...
Ruby Wisper库是一个轻量级的解决方案,它为Ruby对象引入了发布-订阅(Publish-Subscribe,简称Pub/Sub)模式。这种模式允许对象之间通过事件进行通信,而不是直接调用方法,从而增强了代码的解耦性和可扩展性。在...
### Ruby面向对象设计实践 #### 一、概览与背景介绍 《Ruby面向对象设计实践》是一本关于如何在Ruby语言中实现面向对象编程(Object-Oriented Programming, OOP)的经典著作。该书首次出版于2013年,作者是Sandi ...
总结来说,Ruby的方法和类是其面向对象特性的核心。方法提供了代码的重用,而类则定义了对象的结构和行为。通过继承和模块,Ruby提供了灵活的代码组织和扩展机制,使得开发者能够构建出复杂的、可维护的软件系统。
Ruby FastJSONAPI 是一个专为Ruby对象设计的高性能JSON:API序列化库。它旨在帮助开发者以简洁、高效的方式将Ruby对象转换为符合JSON:API规范的JSON格式,极大地提高了开发效率和应用程序的性能。 JSON:API是一个...
**Ruby-RedisObjects:直接将Redis类型映射成Ruby对象** Ruby-RedisObjects是一个非常实用的库,它允许开发者在Ruby应用程序中直接操作Redis数据结构,就像操作Ruby对象一样。这个框架是Ruby社区对ORM(对象关系...
总的来说,Ruby的面向对象枚举通过类的形式实现了枚举的创建、遍历和扩展,这使得Ruby的枚举功能既强大又灵活。在处理有限集合的常量时,面向对象的枚举是开发者的一个得力工具。通过这种方式,我们可以更好地组织...
在Ruby中,类是一个数据类型的蓝图,定义了对象的结构和功能。 2. **对象(Object)**:对象是由类创建的具体实体。每个对象都具有类定义的属性和行为,并且每个对象都是独立存在的,拥有自己独特的状态。 #### 三...
ice_nine, 深冻结 ruby 对象 ice_nine深冻结 ruby 对象 示例require 'ice_nine'# Deep freezes most kinds of objectshash = IceNine.dee
Ruby-Kashmir是一个专门为Ruby开发者设计的Domain Specific Language(DSL),它的主要目标是简化对象的序列化和缓存过程。通过这个库,开发者可以方便地管理和存储他们的数据,提高应用程序的性能,尤其是在处理...
### Ruby面向对象编程中类的方法与类的扩展 在Ruby这门动态的、面向对象的脚本语言中,类和方法扮演着极其重要的角色。本文将深入探讨Ruby中类的方法以及类的扩展,并通过示例代码帮助理解这些概念。 #### 类方法 ...
面向对象设计是计算机科学中的一个核心概念,它是一种通过创建对象、类以及对象间的方法来设计软件的编程范式。这种设计方式允许程序员对现实世界中的问题进行建模,将现实世界中的实体转换成软件世界中的对象。面向...
### Ruby中的类对象概念详解 #### 一、引言 在Ruby编程语言中,面向对象编程(OOP)是一项核心特性,而理解类和对象的概念则是掌握Ruby编程的基础。本文将深入探讨Ruby中的类对象概念,帮助读者更好地理解和应用这一...
### Ruby 语言中类与对象简介及入门级语法详解 #### 一、Ruby中的面向对象概念 Ruby是一种纯粹的面向对象编程语言,这意味着在Ruby中几乎所有的内容都是对象。面向对象编程(Object-Oriented Programming,OOP)的...
在Ruby中,多态主要体现在方法调用上,因为所有对象都是Object类的子类。例如,可以为不同的类定义相同的方法名,它们会根据对象的类型执行不同的操作。 ```ruby class Animal def speak raise "Abstract method...
面向对象的脚本语言Ruby
Mongomatic是一个Ruby库,可以映射Ruby对象到Mongodb文档数据库。 安装: $ gem install mongomatic 标签:Mongomatic