一、从类中创建对象
类Class定义的实例方法Class#new将创建接受者对应的类的对象。这个是通过调用classexpr.allocate来完成的。可以重载 这个方法,但是必须返回正确的类的对象。然后调用新创建的对象的initialize,并将传递给new的参数传递给initialize。
注意:
1、如果类定义中重载了类方法new,并且new没有调用super,那么将无法创建该类的对象,并调用new将返回nil
2、通常initialize应当调用super,用于对父类进行初始化。
二、类和对象之间的交互
1、简单对象
如图:
其中klass用于指向对象的类引用,用于指向class对象的。super是用于指向父类。
2、类对象
在类定义中我们提到了,类定义是一段可执行的代码,并且是在某个对象作为上下文中执行,这样每个类本身就是一个对象。下图中展示了类和对象的全局图。每个类对象的klass都会隐含的指向一个虚拟类metaclass,所有类定义的类方法都是放到这个metaclass中的,当方法的接受者是类对象时,ruby就会直接到该metaclass中查找相应 的方法。可以这样理解,metaclass就是类对象的类。
既然类是对象,那么类对象就可以有自己的实例变量和实例方法。
类对象的实例方法,即,类定义中的类方法定义
- class Test
- def Test.to_s
- puts 'This is class method'
- end
- end
等价:
ruby 代码
- class Test
-
- class << self
- def to_s
-
- .......
- end
- end
- end
类实例变量是定义在metaclass中的变量。所以,必须在metaclass中定义访问函数。可以通过以下几种方式定义
ruby 代码
-
- class Test class Test
- @a='ffd' @a='ffd'
- end class <<self
- attr_reader:a
- class <class << Test <=>
- end
- def a() end
- @a <=> attr_reader:a
- end
- end end
-
- print Test.a => ffd
分享到:
- 2007-05-09 15:26
- 浏览 2376
- 评论(0)
- 论坛回复 / 浏览 (0 / 2520)
- 查看更多
相关推荐
Surrounded - 创建对象的封装系统并专注于他们的交互
1、Ruby编程语言是什么? Ruby 是一种动态的、反射性的、通用的、开源的编程语言,专注于简单性和生产力。...Ruby 和 Python 相似之处: 高级语言支持多平台使用名为 irb 的交互式提示服务器端脚本
模仿者Impersonator是一个Ruby库,用于记录和重放对象交互。 在测试时,您经常会发现调用服务昂贵,而您需要使用 。 为简单的场景创建存根和模拟很容易,但是,对于复杂的交互,事情变得很快。 在难以编写和维护的...
Ruby协作对象实验室 客观的 深入了解对象关系。 构建通过关联和行为相互交互的...您将建立一个Artist类,一个Song类和一个MP3Importer类。 在最高级别,您可以考虑我们将分三步进行的工作: MP3Importer类将解析spec
3.3.2 与Ruby对象交互 3.3.3 Ruby中的标点 3.4 在Ruby中使用面向对象编程 3.4.1 类和对象 3.4.2 对象层功能 3.4.3 类层功能 3.4.4 继承 3.4.5 返回值 3.5 标准输出 3.6 Ruby核心类 ...
3.3.2 与Ruby对象交互 3.3.3 Ruby中的标点 3.4 在Ruby中使用面向对象编程 3.4.1 类和对象 3.4.2 对象层功能 3.4.3 类层功能 3.4.4 继承 3.4.5 返回值 3.5 标准输出 3.6 Ruby核心类 ...
3.3.2 与Ruby对象交互 3.3.3 Ruby中的标点 3.4 在Ruby中使用面向对象编程 3.4.1 类和对象 3.4.2 对象层功能 3.4.3 类层功能 3.4.4 继承 3.4.5 返回值 3.5 标准输出 3.6 Ruby核心类 ...
Ruby工作坊 这是发布的的存储库。 它包含从头到尾完成该课程...使用Ruby on Rails创建交互式Web应用程序 相关工作坊 如果您发现此存储库很有用,则可能需要查看我们的其他一些研讨会标题: Java研讨会 C ++研讨会 HT
提供了按类和按方法分类的文档。 有关如何在应用程序中使用Sunspot的问题,请使用或搜索。 Rails快速入门 添加到Gemfile: gem 'sunspot_rails' gem 'sunspot_solr' # optional pre-packaged Solr distribution ...
Git Gem提供了一个API,通过将系统调用包装到git二进制文件中,可用于创建,读取和操作Git存储库。 该API可用于与Git进行复杂的交互,包括分支和合并,对象检查和操作,历史记录,补丁生成等。 主页 该项目的源代码...
2.介于标记语言和编程语言之间,脚本语言脚本语言不需要编译,可以直接用,由解释器来负责解释,只在被调用时进行解释或编译。 (2)编程语言(programming language): 1.是用来定义计算机程序的形式语言。它是...
Ruby协作对象实验室客观的深入了解对象关系。 构建通过关联和行为相互交互的类。指示这是一个测试驱动的实验室。 使用测试文件和测试输出可了解您在遵循以下准则时的要求。 在本实验中,我们将处理Artist类, Song类...
Ruby协作对象实验室 客观的 深入了解对象关系。 构建通过关联和行为相互...您将建立Artist类, Song类和MP3Importer类。在最高级别,您可以考虑我们将分三步进行的工作: MP3Importer类将解析spec/fixtures文件夹中的
学生提问:非静态内部类对象和外部类对象的关系是怎样的? 206 6.7.2 静态内部类 207 学生提问:为什么静态内部类实例方法也不能访问外部类的实例属性呢? 207 学生提问:接口里是否能定义内部接口? 208 6.7.3 ...
java初级开发者面试笔试题Ruby工作 在招聘 Ruby on Rails 程序员时,一开始要知道面试中要问的正确问题对我来说是一个真正的挑战。 在 30 分钟或更短的时间内,如果不...实际上:类保存数据,具有与该数据交互的方法
构建通过关联和行为相互交互的类。指示这是一个测试驱动的实验室。 使用测试文件和测试输出可了解您在遵循以下准则时的要求。 在本实验中,我们将处理Artist类, Song类和MP3Importer类。 由于类之间的关系, ...
##Comfortably Number by Dex Fitch 一个简单的电话簿应用程序,用于跟踪...练习创建一个通过 POST 与 Web 交互的 ruby 类,并在对象内的对象之间创建关联。 ##执照 麻省理工学院许可证,版权 2015 dexfitch
用于Ruby的 SDK概述该SDK支持对Looker RESTful API的安全/身份验证访问。... 使用SDK时,会创建一个客户端对象,该对象使用client_id / client_secret对和Looker实例的API端点的基本URL进行初始化。 SD
扭扭此 Gem 提供对 HP Server Automation 的 SOAP API 的面向对象访问创建 Rbtwist 是为了允许通过 SOAP WS 接口与 Opsware API 进行交互。 Rbtwist 抽象了幕后的 SOAP 通信,并用普通的 Ruby 对象说话。 注意:代码...