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

Ruby 类的属性、变量、常量和方法定义

    博客分类:
  • Ruby
阅读更多
 一、类属性声明
    一个对象的外部可见部分被称其为属性。ruby通过对象的实例变量来表示对象的内部状态,即,属性。既然是对外部可见的。Ruby中,实例变量无法直接为对象外使用,只能通过对象定义的操作方法访问。同理,实例变量也不能变成public变量,同样是通过方法访问
    那就是可以通过某种方式读取和修改的。Ruby中是通过定义方法来访问属性。有两种方法方式:
    1、直接定义类属性的方法
   
ruby 代码
  1.      
  2. #这个就是定义一个对象的实例变量name,作为Test的属性      
  3. class Test      
  4.    def initialize(name)      
  5.      @name=name      
  6.     end     
  7.   def name      
  8.    @name     
  9.  end     
  10.   def name=(att)   
  11.   @name=att   
  12. end  
  13. end     

      这里为属性name对外提供了读取和删除的方法
    
    2、通过Module的方法定义
       该声明不是Ruby语法的一部分,它不过是定义在类Module的方法,该方法会自动创建访问类属性的方法

ruby 代码
  1. class name       
  2.    attr: attribute[,writable]       
  3.           
  4.     attr_reader :attribute[,attribute,......]       
  5.            
  6.     attr_wirter :attribute[,attribute,......]       
  7.       
  8.    attr_accessor :attribute[,attribute,......]       
  9.       
  10. end      

    attr :直接定义属性,默认的只读,如果后面跟true,表示属性可写,false为只读

ruby 代码
  1. class Test   
  2.   attr :footrue  
  3.   attr :read  
  4. end  
  5. c = Test.new  
  6. c.foo = 5   # 变成 c.foo=( 5 )   
  7. p c.foo     # => 5   
  8.   
  9. c.read='ok' #将会报错,因为read属性是只读   
  10.   

      

   attr_reader: 表示该方法只读,该方法自动创建如下方法:

ruby 代码
  1. class name   
  2.   
  3.      def attribute   
  4.        
  5.          attribute   
  6.     end  
  7. end  

      attr_writer:表示属性只写。它只创建修改属性的方法。不能从外部访问该属性该方法自动创建如下方法:

 

ruby 代码
  1. class name          
  2.             
  3.    def attribute=(att)       
  4.         attribute=att        
  5.    end      
  6. end         

  

ruby 代码
  1. class name          
  2.          
  3.      def attribute          
  4.               
  5.          attribute          
  6.     end         
  7.       
  8.    def attribute=(att)       
  9.         attribute=att        
  10.    end      
  11. end         

 

二、实例变量,类变量
    1、实例变量
      Ruby规定实例变量是以@开头,后跟一个名字。对实例变量的访问注意
        a、在类内部可以对其赋值和读取没有限制
        b、类外不能直接访问对象的实例变量,只能通过方法访问。正如上面所说的属性访问方式一样。
        c、实例变量在使用前不用必须初始化。
    2、类变量
      
       Ruby规定类变量是以两个@@开头,后跟一个名字。对于一个给定的类而言,类变量只存在一份拷贝。
       注意:
         1、类变量必须在使用之前要初始化。
         2、类变量是私有的。要想能从类外部访问,必须定义方法访问。这个方法是一个实例方法,要么是一个类方法。
         3、通常类变量属于包含该变量的最内层的类或模块。但是,可以为被定义该变量的类的所有子类所共享
  三、类常量
     Ruby 的常量也是对对象的引用,常量通常在第一次被赋值的时候创建(通常是在类或模块中定义)。和其他语言不一样,
     Ruby允许改变常量的值,因为常量是对对象的引用,通过改变常量的值,可以改变它所引用的对象的内部状态。
     1、在类或模块中的任何位置都可以直接访问该类或模块中定义的常量。
     2、在类或模块外,可以通过在域作用符::前加上一个返回适当类或模块对象的表达式来访问。
     3、对于不属于任何类或模块的常量,可以直接访问或使用不带前缀的域作用符来访问
     4、通过在常量名之前使用类或模块名和域作用符,还可以将常量从外面添加到已存在的类或模块中。
     注意:
     1、类名本身就是常量。这就意味着可以把类和其他Ruby对象一样对待:可以拷贝它们;将它们作为参数传入方法;或者在表达式中使用它们
     2、如果一个无名的类赋值给了一个常量。Ruby将常量作为类名。

 

 

attr_accessor: 该方法自动创建两个方法,一个用于读取属性值,一个用于修改属性值四、方法
     1、实例方法
       实例方法的定义就是通常的方法定义。其作用域就是每个特定的对象。用于访问该对象的内部状态和行为。
       实例方法的定义是保存在对象所属类对象的定义中。如果没有,就到类对象的父类对象中查找。依次类推
     2、类方法
       在方法名前放置类名以及一个点,来定义类方法
        def classname.methodname
        .....
        end
        类方法的定义是保存在类对象的虚拟类中。当调用类方法时,是到虚拟的类中寻找。如果没有,就到虚拟类的父类中查找。依次类推。
分享到:
评论

相关推荐

    Ruby语言教程:Ruby 变量示例

    ### Ruby语言教程:深入解析Ruby变量类型 #### 一、引言 在编程语言中,变量扮演着极其重要的角色,它们用于存储数据并在程序运行过程中对其进行操作。Ruby 作为一种动态类型的脚本语言,提供了多种变量类型,使得...

    01Ruby 变量.docx

    此外,Ruby 拥有一个非常强大的标准库,其中包含了大量用于各种任务的类和方法,如文件处理、文本处理等,这使得开发者可以轻松地开发出功能丰富的应用程序。最为人所熟知的是 Ruby on Rails,这是一个基于 Ruby 的 ...

    Ruby元编程 源代码 Metaprogramming Ruby source code

    6. **常量、变量和符号**:Ruby的常量、局部变量和符号在运行时也可以被查询和修改,尽管常量的修改可能会导致警告。 7. **Closures和Proc对象**:Ruby的lambda和Proc对象是闭包,它们能捕获定义时的环境并保存下来...

    Ruby编程语言

    在对Ruby进行了简要的综述之后,《Ruby编程语言》详细介绍了以下内容:Ruby的句法和语法结构,数据结构和对象,表达式和操作符,语句和控制结构,方法、proc、lambda和闭包,反射和元编程,Ruby平台。本书还包含对...

    ruby 类常量 解析

    总的来说,Ruby中的常量是一种特殊的标识符,它们在类或模块内定义,遵循大写字母开头的命名约定,并且可以在类/模块外部通过`::`操作符访问。尽管可以改变常量的值,但这通常不推荐,因为这可能会导致不可预期的...

    ruby语言帮助文档(简体中文)

    Ruby也支持变量(局部变量、实例变量、类变量和全局变量),以及常量。 2. **面向对象编程**:Ruby是彻头彻尾的面向对象语言,一切皆对象。每个变量都是一个对象,具有属性(或称为实例变量)和行为(方法)。Ruby...

    Ruby的教程.txt

    在学习Ruby之前,我们首先需要掌握其基础语法,这包括变量、常量和数据类型的定义及使用,以及运算符和控制流语句。随后,我们将深入面向对象编程,探讨类、对象、继承和多态。了解了基础语法和面向对象编程后,我们...

    Programming-Ruby-1.9源代码

    - Ruby允许在运行时修改自身,源代码将展示如何利用元编程技巧动态定义和修改类和方法。 9. **线程与并发** - Ruby的线程模型,以及如何实现并发编程,包括`Thread`类和`Mutex`同步原语。 10. **Gem和包管理** ...

    Ruby元编程pdf

    Ruby元编程的核心概念包括类、模块、方法、变量和对象的动态性。以下是对这些概念的详细解释: 1. **类与模块**:在Ruby中,类和模块都是对象。你可以动态地创建和修改它们。例如,你可以通过`Class.new`创建一个新...

    有关Ruby入门文章

    类包含属性(实例变量)和方法。 二、Ruby的面向对象特性 1. 继承:Ruby中的类可以继承自其他类,使用`操作符表示。子类会继承父类的所有属性和方法。 2. 多态:通过方法重写,子类可以提供不同于父类的实现,...

    Ruby基础教程(中文第4版)

    Ruby支持四种类型的变量:局部变量、实例变量、类变量和全局变量,它们各自在不同范围内起作用。常量是不可变的标识符,而符号是内存效率高的特殊类型,常用于哈希键。了解这些基础知识是编写有效Ruby代码的前提。 ...

    ruby api html

    每个类或模块的页面会列出其方法、属性和其他相关信息。对于每个方法,都会详细说明参数、返回值和可能的错误情况。 总之,Ruby 1.8.6 API HTML 是开发者学习和使用这个版本 Ruby 的重要参考资料,它提供了全面的...

    Ruby基础语法使用方法全套讲解,风格讲解指南大全

    1. **变量**:Ruby中的变量分为五种类型:局部变量(以小写字母或下划线开头)、实例变量(以`@`开头)、类变量(以`@@`开头)、全局变量(以`$`开头)和常量(以大写字母开头)。理解它们的作用域和用法是掌握Ruby...

    Hello, Ruby World!

    - **类和对象**:Ruby支持传统的类定义和实例化对象的方式。 - **继承**:类之间可以通过继承关系共享属性和方法。 - **方法**:对象通过方法进行交互,方法可以是类方法或实例方法。 - **模块与混合**:Ruby支持...

    Ruby语言规范

    **常量定义**:定义类级常量。 3. **类变量/实例定义**:定义类变量或类级实例。 4. **公共方法**:定义公共的类方法。 5. **控制属性**:定义通过`attr_accessor`等生成的属性。 6. **初始化方法**:定义`...

    Ruby In a Nutshell

    - 模块用于封装相关的方法和常量,也可以用于实现类的多重继承。 - 使用`include`将模块的成员导入到类中,`extend`将模块的方法添加到对象实例上。 6. **异常处理** - `begin-rescue-end`用于捕获和处理异常。 ...

    ruby程序设计

    Ruby中的类与对象关系密切,类定义了对象的行为和属性,对象则是类的实例化,拥有类定义的所有特征。 在Ruby编程环境中,安装和配置Ruby是开始学习的第一步。Ruby可以在多种操作系统上运行,包括Windows和Linux。...

    ruby入门练习题.zip

    通过"ruby入门练习题",你将有机会实践这些概念,理解如何定义和使用类,如何操作对象,以及如何利用Ruby的特性来解决问题。这些练习题可能会涉及到数据库连接,这将让你了解如何在Ruby中使用像`ActiveRecord`这样的...

    Ruby元编程第二版中文

    1. **方法定义与调用**:Ruby允许在运行时定义和修改方法,如`define_method`函数可以动态创建方法,而`send`或`__send__`则用于在运行时调用方法。 2. **类与模块操作**:Ruby的`Class.new`和`Module.new`可以用来...

Global site tag (gtag.js) - Google Analytics