一、从类中创建对象
类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
- 浏览 2414
- 评论(0)
- 论坛回复 / 浏览 (0 / 2540)
- 查看更多
相关推荐
上下文中的对象交互可以通过定义方法和委托来实现。委托是一种机制,允许一个对象将某些操作转发给其他对象执行。这在"Surrounded"中可以避免硬编码的依赖关系,使代码更加灵活。例如,一个上下文内的对象A可以无须...
综上所述,"ruby脚本交互.rar"中的源码可能是易语言程序调用和交互Ruby脚本的一个实例,展示了两种语言在实际项目中的协作方式。通过深入学习和理解,我们可以提高编程效率,实现更复杂的软件功能。
在学习Ruby的过程中,理解其面向对象的哲学和特性至关重要。这包括类、对象、继承、封装、多态等概念。通过掌握这些基础,开发者可以编写出优雅且高效的代码,同时利用Ruby的灵活性和强大的元编程能力来解决实际问题...
3. **关联**:MongoMapper支持多种关联类型,如`has_one`、`has_many`、`belongs_to`等,它们允许你建立对象之间的关系。例如,一个用户可以有多个帖子: ```ruby class Post include MongoMapper::Document ...
Ruby是一种动态、面向对象的编程语言,而Her是Ruby社区中的一款ORM(对象关系映射)库,专门用于处理RESTful API。ORM允许开发者用面向对象的方式来操作数据库,而无需直接编写SQL语句,简化了数据操作的过程。Her库...
- Ruby支持动态创建和修改类和对象的能力,这使得开发者可以在运行时根据需要调整程序行为。 - **高度灵活性** - 动态特性使得Ruby能够轻松应对不断变化的需求和复杂的业务逻辑。 **3. 面向对象编程** - **一切...
5. **支持关联**:Fast JSON API能够处理复杂的对象关联,包括单个和多个关联,以及嵌套的关联结构,同时支持包括“include”参数来决定哪些关联应该被包含在响应中。 **使用方法** 要在项目中使用Fast JSON API,...
Ruby的基础包括变量、数据类型、控制结构、函数和类。变量在Ruby中有四种类型:局部变量(以小写字母或下划线开头)、实例变量(以`@`开头)、类变量(以`@@`开头)和全局变量(以`$`开头)。数据类型包括字符串、...
这可能是一份详细的指导文档,涵盖了更高级的主题,如文件操作、网络编程、数据库交互、线程和并发、Gem(Ruby的库管理器)的使用、测试驱动开发(TDD)以及Rails框架的基础知识。Rails是Ruby最著名的Web应用框架,...
标题“纯Ruby创建Win32窗口”涉及到的是在Windows操作系统环境下,使用Ruby编程语言来创建原生的图形用户界面(GUI)窗口。Ruby是一种面向对象的、动态类型的编程语言,通常用于编写脚本和Web应用,但通过特定的库和...
在《Programming Ruby中文版第二版》中,你会了解到如何定义类,创建对象,并通过方法调用来实现对象间的交互。书中会详细解释Ruby的继承、封装和多态等面向对象编程的基本概念。 此外,Ruby的块、 Proc 和 Lambda ...
10. **调试与性能优化**:书中还会涵盖如何使用Ruby的内置工具进行调试,如`irb`交互式解释器、`pry`增强版REPL,以及性能分析和优化的方法。 通过阅读《Programming Ruby》,读者不仅可以学习到Ruby的基本语法,还...
Ruby-Hanami Model 是一个强大的持久层框架,它在Ruby开发中扮演着至关重要的角色,尤其是在处理ORM(对象关系映射)和ODM(对象数据映射)时。这个框架提供了一种优雅的方式来抽象数据库操作,使开发者可以更加专注...
Ruby-RedisObjects简化了Ruby应用与Redis之间的交互,使开发者能够充分利用Redis的高性能和灵活性。通过这种ORM/ODM方式,开发者可以专注于业务逻辑,而不必过多关心底层数据存储的细节。如果你的项目使用Ruby并且...
这使得Ruby在面向对象编程方面具有很高的灵活性,程序员可以通过定义类和模块来构建复杂的软件结构。Ruby的语法简洁,易于阅读,强调代码的可读性和表达性,这在很大程度上减少了代码量并提高了开发效率。 Ruby的...
Ruby中的类可以用来创建新的对象,而对象则是类的实例。继承允许一个类从另一个类继承属性和方法,这样可以避免重复代码并实现代码重用。封装是指将数据和操作这些数据的方法结合在一起,保护内部状态不受外部干扰。...
- 方法:Ruby中的方法可以定义在类、模块或对象上,支持块(block)和Proc对象。 - 控制结构:包括条件语句(如if、unless)、循环(如for、while、until、each)和流程控制(break、next、redo、retry)。 2. **...
8. **标准库丰富**:Ruby的标准库包含了大量实用的模块和类,如文件操作、网络通信、XML解析等,为开发者提供了便利。 提到Ruby,就不得不提Rails框架。Ruby on Rails(简称Rails)是由David Heinemeier Hansson...