论坛首页 编程语言技术论坛

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

浏览 5578 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-05-11  
 一、类属性声明
    一个对象的外部可见部分被称其为属性。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
        类方法的定义是保存在类对象的虚拟类中。当调用类方法时,是到虚拟的类中寻找。如果没有,就到虚拟类的父类中查找。依次类推。
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics