1.类和实例的关系

  使用【实例.class】查看某个对象属于哪个类

  使用【实例.instance_of(类名)】判断该实例是否属于某个类

  使用【实例.instance_methods】查看类的所有实例方法

2.BasicObject类是所有类的父类,它只定义了ruby对象的最基本的方法,甚至连一般对象需要的功能都没有,顾一般继承Object类,可以通过【is-a】或【is-a?】判断继承关系

3.类可以通过【class】关键字进行创建,默认具有无参的构造方法,通过是可以通过定义【initialize方法】定义有参数的构造方法,在方法中可以通过【self】关键字来调用接受者

4.属性的getter和setter方法可以通过两种方法实现

  方法一:定义供外部访问的方法  def 属性   @属性  end   和 def 属性名=(属性值)  @属性=属性值  end

  方法二:通过声明访问属性的方法  attr_reader:属性名    attr_writer:属性名   attr_accessor:属性名

5.类方法的定义

  1.方法一:在单例类中定义的方法都是单例方法 ,可以使用【class << 类名】的形式定义单例类,在单例类中添加方法即可

  2.方法二:在普通类定义中,添加类方法  【class << self】

    class 类名

      class << self

        def 方法名(参数)

          执行操作

        end

      end

    end

  3.方法三:使用 【def 类名.方法名(参数)】的形式定义

  4.方法四:在类的定义中使用【def self.方法名】进行定义

6.类常量可以直接在类的定义中进行定义,使用【类名::常量名】进行调用

 类变量不能使用attr_accessor,需要直接定义访问方法

7.方法的访问级别:public(默认),private,protected

  可以通过【private : 方法名】来单独设置某个方法的访问级别

  也可以通过【private】等来设置,之后的所有方法的访问级别

8.类的扩展

  1.在原有类的基础上添加新的方法

    class 原类名

      def 新添加的方法名

        执行的处理

      end

    end

  2.继承父类(默认继承Object类)

     1.使用【class 类名 < 父类名】的方式定义子类,在子类定义中可以通过【alias 别名 原名】将原方法名进行别名设置,通过【undef 方法名】删除已有的方法

    2.通过【常量名=Class.new(父类名)】定义一个继承了父类的子类,并赋值给常量

  3.在方法类定义中,通过【extend 模块名】扩展类的类方法,通过【include 模块名】扩展类的实例方法

9.模块

  可以通过【module 模块名】进行调用,不能实例化,也不能被继承

  可以通过【模块名.方法名】【模块名::常量名】直接调用,或者先通过【include 模块名】引入模块,然后使用【方法名】调用模块方法

  方法调用时的查找顺序:类、模块(多个模块时,最后一个模块优先;相同模块包含多次时,第二次以后的会被忽略)、父类中依次查找,执行查找到的第一个方法

10.范围表达式:使用【Range.new(起始范围,结束范围)】或者【起始范围..结束范围】

    x..y   表示从x到y

    x...y  表示从x到y的前一个元素

    使用【变量.succ】方法,返回所在范围的下一个元素    如1.succ    #2     'a'.succ    #'b'

11.异常处理

  begin

    可能出现的异常的代码

  rescue =>异常对象(如Errno::ENOENT等)

    发生异常后的处理

    retry    #重新执行begin以下的代码

  ensure

    不管是否发生异常都要执行的代码

  end

  异常发生后自动赋值的变量:$!   最后发生的异常    $@    最后发生异常的位置

  可以通过raise 抛出异常

12.块的封装

  1.方法一:

      定义:变量名=Proc.new do |块变量|

              希望执行的操作

             end

      调用:变量名.call(块变量的值)

  2.方法二:方法定义时,在尾部的参数使用【&参数名】的形式,ruby会自动把该参数转换为Proc对象

    

ruby学习总结04的更多相关文章

  1. ruby 学习笔记 1

    写ruby blog  系统的记录下.也是对我学ruby的点滴记录. 先介绍下我的学习环境.系统:ubuntu12.04文档:techotopia ,ruby文档,the hard way learn ...

  2. Ruby学习笔记4: 动态web app的建立

    Ruby学习笔记4: 动态web app的建立 We will first build the Categories page. This page contains topics like Art, ...

  3. Ruby学习心得之 Linux下搭建Ruby环境

    作者:枫雪庭 出处:http://www.cnblogs.com/FengXueTing-px/ 欢迎转载 Ruby学习心得之 Linux下搭建Ruby环境1.前言2.Linux下安装Ruby环境 一 ...

  4. Ruby学习之mixin

    直接上代码: module Action def jump @distance = rand(4) + 2 puts "I jumped forward #{@distance} feet! ...

  5. ruby学习网站

    Ruby官方中文网(推荐): https://www.ruby-lang.org/zh_cn/ 国内非常不错的Ruby学习教程网站(推荐): http://www.yiibai.com/ruby Ru ...

  6. Angularjs学习---ubuntu12.04中karma安装配置

    Angularjs学习---ubuntu12.04中karma安装配置中常见的问题总结   karma启动时出现了很多问题: 1.安装karma前提条件 安装karma首先要安装nodejs,npm然 ...

  7. 机器学习实战(Machine Learning in Action)学习笔记————04.朴素贝叶斯分类(bayes)

    机器学习实战(Machine Learning in Action)学习笔记————04.朴素贝叶斯分类(bayes) 关键字:朴素贝叶斯.python.源码解析作者:米仓山下时间:2018-10-2 ...

  8. ruby学习笔记(1)-puts,p,print的区别

    ruby学习笔记-puts,p,print的区别 共同点:都是用来屏幕输出的. 不同点:puts 输出内容后,会自动换行(如果内容参数为空,则仅输出一个换行符号):另外如果内容参数中有转义符,输出时将 ...

  9. SaToken学习笔记-04

    SaToken学习笔记-04 如果有问题,请点击:传送门 角色认证 在sa-token中,角色和权限可以独立验证 // 当前账号是否含有指定角色标识, 返回true或false StpUtil.has ...

随机推荐

  1. Oracle数据库归档模式的切换及其相关操作详解

    SQL> shutdown immediate; Database closed. Database dismounted. ORACLE instance shut down. SQL> ...

  2. sqlhelper-sql数据库

    using System; using System.Collections.Generic; using System.Text; using System.Data.SqlClient; usin ...

  3. 雅虎工程师提供的CSS初始化代码

    body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,button,textarea,p,b ...

  4. SQLServer出现 '其他会话正在使用事务的上下文' 的问题原因,什么是环回链接服务器?(转载)

    本人经过百度查找并且自己进行测试得到问题原因: MSDN上看了一下说是sql server 不支持在分布式事务处理中存在指向本地的链接服务器(环回链接服务器) 通过上面简单说明大家有可能没完全理解环回 ...

  5. SQL SERVER: 合并相关操作(Union,Except,Intersect) - 转载

    SQL Server 中对于结果集有几个处理,值得讲解一下 1. 并集(union,Union all) 这个很简单,是把两个结果集水平合并起来.例如 SELECT * FROM A UNION SE ...

  6. 解决Android SDK Manager更新下载速度慢

    1.在Host文件加上 203.208.46.146 www.google.com 74.125.113.121 developer.android.com 203.208.46.146 dl.goo ...

  7. ID3DXMesh接口 创建自己的立方体网格

    D3DXCreateMeshFVF 首先创建一个ID3DXMesh接口. ID3DXMesh接口的说明可以参数龙书. 这里主要是用代码来讲解: #define VERTEX_FVF (D3DFVF_X ...

  8. 161101、在Java中如何高效判断数组中是否包含某个元素

    如何检查一个数组(无序)是否包含一个特定的值?这是一个在Java中经常用到的并且非常有用的操作.同时,这个问题在Stack Overflow中也是一个非常热门的问题.在投票比较高的几个答案中给出了几种 ...

  9. 忘记windows的登陆密码

    http://user.qzone.qq.com/372806800/blog/1342261571

  10. JS调用Java函数--DWR框架

    (1)dwr与ssh框架整合教程dwr框架介绍. DWR(Direct Web Remoting)是一个用于改善web页面与Java类交互的远程服务器端Ajax开源框架,可以帮助开发人员开发包含AJA ...