`
yjjxf
  • 浏览: 42050 次
  • 性别: 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 - 创建对象的封装系统并专注于他们的交互

    Ruby面试题和答案(2024年收集更新)

    1、Ruby编程语言是什么? Ruby 是一种动态的、反射性的、通用的、开源的编程语言,专注于简单性和生产力。...Ruby 和 Python 相似之处: 高级语言支持多平台使用名为 irb 的交互式提示服务器端脚本

    模仿者:用于记录和重放对象交互的Ruby库

    模仿者Impersonator是一个Ruby库,用于记录和重放对象交互。 在测试时,您经常会发现调用服务昂贵,而您需要使用 。 为简单的场景创建存根和模拟很容易,但是,对于复杂的交互,事情变得很快。 在难以编写和维护的...

    Ruby合作对象实验室v-000

    Ruby协作对象实验室 客观的 深入了解对象关系。 构建通过关联和行为相互交互的...您将建立一个Artist类,一个Song类和一个MP3Importer类。 在最高级别,您可以考虑我们将分三步进行的工作: MP3Importer类将解析spec

    Ruby on Rails Web开发之旅.pdf【第二部分】

     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 on Rails Web开发之旅.pdf【第一部分】

     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 on Rails Web开发之旅.pdf【第三部分】

     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核心类  ...

    The-Ruby-Workshop:一种新的交互式学习Ruby的方法

    Ruby工作坊 这是发布的的存储库。 它包含从头到尾完成该课程...使用Ruby on Rails创建交互式Web应用程序 相关工作坊 如果您发现此存储库很有用,则可能需要查看我们的其他一些研讨会标题: Java研讨会 C ++研讨会 HT

    太阳黑子:Solr支持的Ruby对象搜索

    提供了按类和按方法分类的文档。 有关如何在应用程序中使用Sunspot的问题,请使用或搜索。 Rails快速入门 添加到Gemfile: gem 'sunspot_rails' gem 'sunspot_solr' # optional pre-packaged Solr distribution ...

    ruby-git:RubyGit是一个Ruby库,通过将系统调用包装到git二进制文件中,可用于创建,读取和操作Git存储库

    Git Gem提供了一个API,通过将系统调用包装到git二进制文件中,可用于创建,读取和操作Git存储库。 该API可用于与Git进行复杂的交互,包括分支和合并,对象检查和操作,历史记录,补丁生成等。 主页 该项目的源代码...

    Python 简介 Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言.rar

    2.介于标记语言和编程语言之间,脚本语言脚本语言不需要编译,可以直接用,由解释器来负责解释,只在被调用时进行解释或编译。 (2)编程语言(programming language): 1.是用来定义计算机程序的形式语言。它是...

    ruby-collaborating-objects-lab-banana-batch

    Ruby协作对象实验室客观的深入了解对象关系。 构建通过关联和行为相互交互的类。指示这是一个测试驱动的实验室。 使用测试文件和测试输出可了解您在遵循以下准则时的要求。 在本实验中,我们将处理Artist类, Song类...

    ruby-collaborating-objects-lab-online-web-sp-000

    Ruby协作对象实验室 客观的 深入了解对象关系。 构建通过关联和行为相互...您将建立Artist类, Song类和MP3Importer类。在最高级别,您可以考虑我们将分三步进行的工作: MP3Importer类将解析spec/fixtures文件夹中的

    疯狂JAVA讲义

    学生提问:非静态内部类对象和外部类对象的关系是怎样的? 206 6.7.2 静态内部类 207 学生提问:为什么静态内部类实例方法也不能访问外部类的实例属性呢? 207 学生提问:接口里是否能定义内部接口? 208 6.7.3 ...

    java初级开发面试笔试题-ruby-job:Ruby工作

    java初级开发者面试笔试题Ruby工作 在招聘 Ruby on Rails 程序员时,一开始要知道面试中要问的正确问题对我来说是一个真正的挑战。 在 30 分钟或更短的时间内,如果不...实际上:类保存数据,具有与该数据交互的方法

    ruby-oo-object-relationships-collaborating-objects-lab

    构建通过关联和行为相互交互的类。指示这是一个测试驱动的实验室。 使用测试文件和测试输出可了解您在遵循以下准则时的要求。 在本实验中,我们将处理Artist类, Song类和MP3Importer类。 由于类之间的关系, ...

    comfortably-number:一个简单的电话簿应用程序,用于跟踪姓名和相关的电话传真号码

    ##Comfortably Number by Dex Fitch 一个简单的电话簿应用程序,用于跟踪...练习创建一个通过 POST 与 Web 交互的 ruby​​ 类,并在对象内的对象之间创建关联。 ##执照 麻省理工学院许可证,版权 2015 dexfitch

    looker-sdk-ruby:用于Ruby的Looker SDK

    用于Ruby的 SDK概述该SDK支持对Looker RESTful API的安全/身份验证访问。... 使用SDK时,会创建一个客户端对象,该对象使用client_id / client_secret对和Looker实例的API端点的基本URL进行初始化。 SD

    rbtwist:HP Server Automation (Opsware) SOAP API 的 Ruby 接口

    扭扭此 Gem 提供对 HP Server Automation 的 SOAP API 的面向对象访问创建 Rbtwist 是为了允许通过 SOAP WS 接口与 Opsware API 进行交互。 Rbtwist 抽象了幕后的 SOAP 通信,并用普通的 Ruby 对象说话。 注意:代码...

Global site tag (gtag.js) - Google Analytics