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. 对于Mybatis在C#.Net中个人使用的总结(一) Mybatis 的结果映射

    (图片中的文字上传之后就都看不清,我再图片的下边会用斜体字标清) 首先我在项目中使用Mybatis 是用XML完成映射的.至于XML这门语言,其实很简单的(对于入门来说,因为我是刚入门哈~),如果你还 ...

  2. c#如实现将一个数字转化为其他进制字符串输出

    之前在  os  上看到有人说过 一直想整理 但是一直没时间 后来 从csdn 上  知道了一份 下面内容 来自 (1)http://bbs.csdn.net/topics/60512816 tost ...

  3. MVC权限管理系统dwpro项目权限按钮无故自动消失问题

    关于那个权限按钮丢失的问题修改方法如下: 把源文件中的XmlConfig文件夹里的Config.xml文件剪切到根目录下,并修改文件名为:app.config(关键是后缀不是xml了是config) ...

  4. CSS3 Transform Matrix

    css3中的transform让我们操作变形变得很简单,诸如,translate–移动,scale–缩放,rotate–旋转,skew–斜切.这几个属性很方便,也很简单,但是其中matrix我们就不常 ...

  5. linux系统-代码行数计算

    find macc-cometd -type f -name "*.java" -print0 | xargs -0 wc -l

  6. oracle中的常用语句

    1:查看当前用户的缺省表空间 SELECT USERNAME, DEFAULT_TABLESPACE FROM USER_USERS; 2:查看当前用户的角色 SELECT * FROM USER_R ...

  7. 夺命雷公狗---微信开发56----微信js-sdk接口开发(3)所有接口功能

    按照上节课程里面的介绍,我们可以先将刚才在signatrue.php里获取到的信息填写进jssdk.htm模版文件里填写各个权限的参数 jssdk.htm代码如下: <!DOCTYPE html ...

  8. 【py网页】urllib模块,urlopen

    Python urllib 库提供了一个从指定的 URL 地址获取网页数据,然后对其进行分析处理,获取想要的数据. 下面是在 Python Shell 里的 urllib 的使用情况: 01 Pyth ...

  9. $.extend,$.fn.extend,$.fn的区别

    jQuery.extend(object) 为jQuery类添加类方法,可以理解为添加静态方法.如: jQuery.extend({ min: function(a, b) { return a &l ...

  10. listview中item 有checkbox多选防止滑动 listview页面 出现checkbox错位问题

    checkbox点击切换背景 <CheckBox android:id="@+id/checkbox" android:layout_width="40dp&quo ...