`
yjjxf
  • 浏览: 41937 次
  • 性别: 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的句法和语法结构,数据结构和对象,表达式和操作符,语句和控制结构,方法、proc、lambda和闭包,反射和元编程,Ruby平台。本书还包含对...

    ruby 类常量 解析

    ANSI版的eval.rb不会报告这一警告) ruby>fluid=30 30 ruby>fluid=31 31 ruby>Solid=32 32 ruby>Solid=33 (eval):1: warning: already initialized constant Solid 33 常量可以定义在类里,但不像实变量,它们...

    Ruby菜鸟入门指南.md

    6. 变量命名约定,如局部变量、常量、实例变量、类变量等。 7. 方法命名约定,如?结尾表示返回布尔值,!结尾表示会修改对象。 8. 块(Block)的概念及使用方式,用于扩展方法功能。 9. 迭代器的使用方式,如each, ...

    ruby语法基础教程

    §3.2 对象,属性和方法 18 §3.3 继承 20 §3.4 特殊方法与特殊类 21 §3.5 类变量与类方法 23 §3.4 存取控制 23 §3.6 元类 25 §3.7 Ruby的动态性 26 §3.8 变量 26 §3.8.1 局部变量 27 §3.8.2 实例变量 27 §...

    非常好的Ruby中文版项目资源,分享出来.zip

    这是 Ruby User’s Guide的简体中文版本:Ruby用户指南...重新定义方法 访问控制 单例方法 模块 过程对象 变量 全局变量 实例变量 局部变量 类常量 异常处理:rescue 异常处理:ensure 访问器 对象初始化

    JavaScript权威指南(第6版)(附源码)

    11.2 常量和局部变量 11.3 解构赋值 11.4 迭代 11.5 函数简写 11.6 多catch 从句 11.7 E4X: ECMAScript for XML 第12章 服务器端JavaScript 12.1 用Rhino脚本化Java 12.2 用Node实现异步I/O 第二部分 客户端...

    Core-Ruby-1:2014 年 10 月开始的 Core Ruby 课程的报告

    类、模块和常量。 方法解析查找和祖先链。 自定义可枚举对象。 3 Lambda 与 Proc 语义。 捆绑。 例外。 4 核心。 模块功能。 需要与负载。 高级枚举。 枚举器。 正则表达式。 5 单例类。 动态方法定义。 不要...

    JavaScript权威指南(第六版) 清晰-完整

    11.2 常量和局部变量 11.3 解构赋值 11.4 迭代 11.5 函数简写 11.6 多catch 从句 11.7 E4X: ECMAScript for XML 第12章 服务器端JavaScript 12.1 用Rhino脚本化Java 12.2 用Node实现异步I/O 第二部分 客户端...

    袍:Ruby的代码导航,文档查找和完成

    跳转到模块/类/常量定义 显示方法文档 显示有关使用ElDoc在点调用的方法的信息 方法和常量名称完成 使用简单的正则表达式搜索在当前文件中跳转和完成实例和本地变量名 要查看可用命令,请键入Mx describe-package ...

    JavaScript权威指南(第6版)(中文版)

    11.2 常量和局部变量 11.3 解构赋值 11.4 迭代 11.5 函数简写 11.6 多catch 从句 11.7 E4X: ECMAScript for XML 第12章 服务器端JavaScript 12.1 用Rhino脚本化Java 12.2 用Node实现异步I/O 第二部分 客户端...

    JavaScript权威指南(第6版)

    11.2 常量和局部变量 11.3 解构赋值 11.4 迭代 11.5 函数简写 11.6 多catch 从句 11.7 E4X: ECMAScript for XML 第12章 服务器端JavaScript 12.1 用Rhino脚本化Java 12.2 用Node实现异步I/O 第二部分 客户端...

    rbs:Ruby的类型签名

    您可以写下一个类或模块的定义:类中定义的方法,实例变量及其类型以及继承/混合关系。 它还允许声明常量和全局变量。 以下是聊天应用程序的RBS的一个小示例。 module ChatApp VERSION: String class User attr_...

    JavaScript权威指南(第6版)

    11.2 常量和局部变量 271 11.3 解构赋值 274 11.4 迭代 276 11.5 函数简写 285 11.6 多catch 从句 285 11.7 e4x: ecmascript for xml 286 第12章 服务器端javascript 290 12.1 用rhino脚本化java 291 12.2 用node...

    JavaScript权威指南(第6版)中文文字版

    11.2 常量和局部变量 271 11.3 解构赋值 274 11.4 迭代 276 11.5 函数简写 285 11.6 多catch 从句 285 11.7 e4x: ecmascript for xml 286 第12章 服务器端javascript 290 12.1 用rhino脚本化java 291 12.2 用node...

    RubyUsersGuide-zh:这是Ruby User’s Guide的简体中文版:Ruby用户指南

    目录迭代器面向对象的思考方法类继承重新定义方法访问控制单例方法模块过程对象变量全局变量实例变量局部变量类常量异常处理:rescue异常处理:ensure访问器对象初始化其他关于本指南版权信息贡献者名单Copyright (c...

    Orbacle:允许智能跳转到定义,自动完成,不断重命名等功能的程序

    当前状态当前语言服务器支持:悬停要求有关表达式“类型”的信息跳转到定义在以下情况下工作: 用于常量->跳转到常量定义用于方法调用->跳转至该方法的定义用于super关键字->从父类跳转到方法的定义(尚不include / ...

    javaSE代码实例

    13.3.2 编写方法链以及StringBuffer类的重要方法 255 13.4 StringBuilder类 258 13.5 正则表达式 259 13.5.1 正则表达式的基本语法 259 13.5.2 Pattern类简介 262 13.5.3 Matcher类简介 263 13.5.4 ...

    Linux C程序设计大全

    4.4.6 const关键字修饰指针——在指针定义之前和定义之中 4.4.7 使用const关键字的意义 第5章 C语言的高级技术 第2篇 C语言开发环境 第6章 vi与vim编辑器 第7章 gcc编译器 第8章 makefile 第9章 gdb 第3篇 Linux进程...

    Ruby的基本语法学习总结

    关键字不能用于定义变量或者常量,module,class,def , undef,defined?,if ,then,else,elsif,case ,when,unless,for,in,while ,until,next,break,do,redo ,retry,yield,not,and,or,true,...

Global site tag (gtag.js) - Google Analytics