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. js break continue

    for 循环从 1 到 10 迭代变量 i.在循环主体中,if 语句将(使用取模运算符)检查 i 的值是否能被 5 整除.如果能被 5 整除,将执行 break 语句.alert 显示 "4 ...

  2. session_start()一些问题

    session问题集锦 对于PHP的session功能,始终找不到合适的答案,尤其是一些错误,还有一些没有错误的结果,最可怕的就是后者,一直为许多的初学者为难.就连有些老手,有时都被搞得莫名其妙.本文 ...

  3. syscolumns表中所有字段的意思

    --syscolumns表中所有字段的意思 name sysname --列名或过程参数的名称. id int --该列所属的表对象 ID,或与该参数关联的存储过程 ID. xtype tinyint ...

  4. vscode icon in elementary os

    chmod +x /home/shenfeng/vscode/code /home/shenfeng/vscode/code sudo ln -s /home/shenfeng/vscode/code ...

  5. 【NOIP模拟赛】工资

    工资 [试题描述] 聪哥在暑假参加了打零工的活动,这个活动分为n个工作日,每个工作日的工资为Vi.有m个结算工钱的时间,聪哥可以自由安排这些时间,也就是说什么时候拿钱,老板说的不算,聪哥才有发言权!( ...

  6. HGE游戏引擎之实战篇,渐变的游戏开场

    #include <hge.h> #include "menuitem.h" //#include <hgefont.h> #include <hge ...

  7. 随讲MyIsam和InnoDB的区别

    mysiam表不支持事务处理,同时mysiam表不支持外键.外键不用说了吧?不知道的话,找度娘. 同时,在执行数据库写入的操作(insert,update,delete)的时候,mysiam表会锁表, ...

  8. UIViewController卸载过程(ios6.0之前)

    1.当应用程序收到内存不足的警告之后,程序中所有存在的UIViewController都会收到didReceiveMemoryWarning调用消息,目的是将当前不显示的View释放掉,缓解内存压力. ...

  9. cornerstone的简单使用

    第一步打开工具点击左下角那个加号,弹出的选项中选Add Repository..或者直接点中间显示的Add Repository...是一样的 第二步: 下面填的内容是你经理给你的账号和密码,你只要c ...

  10. 160829、Java加解密与数字签名

    ** Java加解密 ** 实现方式:JDK实现,CC,BC JDK提供比较基础的底层的实现:CC提供一些简化的操作:BC提供补充 一.Base64加密 非常简单,加密解密就一个函数. 代码如下: 二 ...