`
yjjxf
  • 浏览: 42436 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

Ruby创建对象以及类和对象之间交互

    博客分类:
  • Ruby
阅读更多

一、从类中创建对象
      类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就是类对象的类。

        既然类是对象,那么类对象就可以有自己的实例变量和实例方法。

  • 实例方法

           类对象的实例方法,即,类定义中的类方法定义

 

  1. class Test   
  2.    def Test.to_s   
  3.       puts 'This is class method'   
  4.    end  
  5. end  

      等价:

ruby 代码
  1. class Test         
  2.         
  3.   class << self         
  4.      def to_s         
  5.             
  6.         .......         
  7.      end         
  8.   end         
  9. end        
  • 实例变量

           类实例变量是定义在metaclass中的变量。所以,必须在metaclass中定义访问函数。可以通过以下几种方式定义

ruby 代码
  1.   
  2. class Test                                              class Test   
  3. @a='ffd'                                                 @a='ffd'   
  4. end                                                      class <<self  
  5.                                                          attr_reader:a  
  6. class <class << Test       <=>             
  7.                                                          end  
  8.  def a()                                                end            
  9.  @a                    <=>     attr_reader:a  
  10.  end  
  11. end                            end  
  12.   
  13. print Test.a => ffd  

  

分享到:
评论

相关推荐

    Ruby-Surrounded创建对象的封装系统并专注于他们的交互

    上下文中的对象交互可以通过定义方法和委托来实现。委托是一种机制,允许一个对象将某些操作转发给其他对象执行。这在"Surrounded"中可以避免硬编码的依赖关系,使代码更加灵活。例如,一个上下文内的对象A可以无须...

    ruby脚本交互.rar

    综上所述,"ruby脚本交互.rar"中的源码可能是易语言程序调用和交互Ruby脚本的一个实例,展示了两种语言在实际项目中的协作方式。通过深入学习和理解,我们可以提高编程效率,实现更复杂的软件功能。

    Ruby教程面向对象脚本语言

    在学习Ruby的过程中,理解其面向对象的哲学和特性至关重要。这包括类、对象、继承、封装、多态等概念。通过掌握这些基础,开发者可以编写出优雅且高效的代码,同时利用Ruby的灵活性和强大的元编程能力来解决实际问题...

    Ruby-MongoMapper针对Mongo的一个Ruby对象映射器

    3. **关联**:MongoMapper支持多种关联类型,如`has_one`、`has_many`、`belongs_to`等,它们允许你建立对象之间的关系。例如,一个用户可以有多个帖子: ```ruby class Post include MongoMapper::Document ...

    Ruby-Her一个ORM对象关系映射将REST资源映射成Ruby对象

    Ruby是一种动态、面向对象的编程语言,而Her是Ruby社区中的一款ORM(对象关系映射)库,专门用于处理RESTful API。ORM允许开发者用面向对象的方式来操作数据库,而无需直接编写SQL语句,简化了数据操作的过程。Her库...

    Ruby动态编程对象编程Ruby动态编程对象编程Ruby动态编程对象编程

    - Ruby支持动态创建和修改类和对象的能力,这使得开发者可以在运行时根据需要调整程序行为。 - **高度灵活性** - 动态特性使得Ruby能够轻松应对不断变化的需求和复杂的业务逻辑。 **3. 面向对象编程** - **一切...

    Ruby-FastJSONAPI一个用于Ruby对象的快速JSONAPI的序列化器

    5. **支持关联**:Fast JSON API能够处理复杂的对象关联,包括单个和多个关联,以及嵌套的关联结构,同时支持包括“include”参数来决定哪些关联应该被包含在响应中。 **使用方法** 要在项目中使用Fast JSON API,...

    ruby中文教程,从基础到深入的让你学习ruby

    Ruby的基础包括变量、数据类型、控制结构、函数和类。变量在Ruby中有四种类型:局部变量(以小写字母或下划线开头)、实例变量(以`@`开头)、类变量(以`@@`开头)和全局变量(以`$`开头)。数据类型包括字符串、...

    Ruby教程.chm和Ruby程序设计.doc

    这可能是一份详细的指导文档,涵盖了更高级的主题,如文件操作、网络编程、数据库交互、线程和并发、Gem(Ruby的库管理器)的使用、测试驱动开发(TDD)以及Rails框架的基础知识。Rails是Ruby最著名的Web应用框架,...

    纯Ruby创建Win32窗口

    标题“纯Ruby创建Win32窗口”涉及到的是在Windows操作系统环境下,使用Ruby编程语言来创建原生的图形用户界面(GUI)窗口。Ruby是一种面向对象的、动态类型的编程语言,通常用于编写脚本和Web应用,但通过特定的库和...

    programming+ruby中文版第二版

    在《Programming Ruby中文版第二版》中,你会了解到如何定义类,创建对象,并通过方法调用来实现对象间的交互。书中会详细解释Ruby的继承、封装和多态等面向对象编程的基本概念。 此外,Ruby的块、 Proc 和 Lambda ...

    Programming Ruby

    10. **调试与性能优化**:书中还会涵盖如何使用Ruby的内置工具进行调试,如`irb`交互式解释器、`pry`增强版REPL,以及性能分析和优化的方法。 通过阅读《Programming Ruby》,读者不仅可以学习到Ruby的基本语法,还...

    Ruby-HanamiModel一个持久层框架拥有实体仓库数据映射器和查询对象

    Ruby-Hanami Model 是一个强大的持久层框架,它在Ruby开发中扮演着至关重要的角色,尤其是在处理ORM(对象关系映射)和ODM(对象数据映射)时。这个框架提供了一种优雅的方式来抽象数据库操作,使开发者可以更加专注...

    Ruby-RedisObjects直接将Redis类型映射成Ruby对象

    Ruby-RedisObjects简化了Ruby应用与Redis之间的交互,使开发者能够充分利用Redis的高性能和灵活性。通过这种ORM/ODM方式,开发者可以专注于业务逻辑,而不必过多关心底层数据存储的细节。如果你的项目使用Ruby并且...

    Ruby教程 脚本语言

    这使得Ruby在面向对象编程方面具有很高的灵活性,程序员可以通过定义类和模块来构建复杂的软件结构。Ruby的语法简洁,易于阅读,强调代码的可读性和表达性,这在很大程度上减少了代码量并提高了开发效率。 Ruby的...

    ruby-2.1.1.tar.gz

    Ruby中的类可以用来创建新的对象,而对象则是类的实例。继承允许一个类从另一个类继承属性和方法,这样可以避免重复代码并实现代码重用。封装是指将数据和操作这些数据的方法结合在一起,保护内部状态不受外部干扰。...

    ruby学习的源码

    - 方法:Ruby中的方法可以定义在类、模块或对象上,支持块(block)和Proc对象。 - 控制结构:包括条件语句(如if、unless)、循环(如for、while、until、each)和流程控制(break、next、redo、retry)。 2. **...

    ruby(前途大好的ruby+rains)

    8. **标准库丰富**:Ruby的标准库包含了大量实用的模块和类,如文件操作、网络通信、XML解析等,为开发者提供了便利。 提到Ruby,就不得不提Rails框架。Ruby on Rails(简称Rails)是由David Heinemeier Hansson...

Global site tag (gtag.js) - Google Analytics