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. 转 SSIS处理导入数据时, 存在的更新, 不存在的插入

    SSIS处理导入数据时, 存在的更新, 不存在的插入 分类: DTS/SSIS2006-09-10 12:43 18185人阅读 评论(22) 收藏 举报 ssissql servermicrosof ...

  2. paper 22:kl-divergence(KL散度)实现代码

    这个函数很重要: function KL = kldiv(varValue,pVect1,pVect2,varargin) %KLDIV Kullback-Leibler or Jensen-Shan ...

  3. js获取url的参数值

    var match = new RegExp('[?&]voucherSn=([^&]*)').exec("http://m.v3beta.tootoo.cn/index.p ...

  4. angular form 验证 ngMessage

    <!DOCTYPE HTML> <html ng-app="deliciousApp"> <head> <meta charset=&qu ...

  5. [sinatra] Sinatra再入门

    原文URL:http://www.rubycc.com/bbs/topic_detail/86 1.基础代码app.rb require 'rubygems' require 'sinatra/bas ...

  6. Ubuntu 13.10 64位 无法 安装 ia32-libs 解决办法

    安装新立德软件包管理器:打开终端,输入以下命令:sudo apt-get install synaptic 打开新立德软件包管理器,选择“设置>软件库” 选择“其他软件 > 添加” 在AP ...

  7. JS 字符串转日期格式 日期格式化字符串

    /** * @author 陈维斌 http://www.cnblogs.com/Orange-C/p/4042242.html%20 3 * 如果想将日期字符串格式化,需先将其转换为日期类型Date ...

  8. Mongodb 笔记09 备份、部署MongoDB

    备份 1. 只有在有信心能在紧急情况下完成迅速部署的情况下,备份才是有用的.所以,无论选择了哪种备份技术,一定要对备份及恢复备份的操作进行练习,知道了然于心. 2. 通常情况下,应对副本集的非主节点( ...

  9. Android NDK 开发(三)--常见错误锦集合Log的使用【转】

    转载请注明出处:http://blog.csdn.net/allen315410/article/details/41826511  Android NDK开发经常因某些因素会出现一些意想不到的错误, ...

  10. 【python cookbook】【字符串与文本】8.编写多行模式的正则表达式

    问题:用正则表达式对一段文本块做匹配,但是希望在进行匹配时能够跨越多行 解决方案: 1.正则表达式添加对换行符的支持: 2.re.compile()函数一个有用的标记-re.DOTALL使得正则表达式 ...