此笔记是为了帮助理解 "<<" 指令
ruby语言允许我们在一个对象的基础上定义类,使得我们可以单独扩展一个对象的行为,例子如下

test="hello" #普通string 
normal=a.dup #还是普通string 
class << test 
        def to_s 
                "value is #{self}" 
        end 
end        #test对象已经被更新, normal保持不变 

运行完上述代码以后

normal.to_s =="hello" 
test.to_s=="value is hello" 

从这个例子上来看, 此时的test对象的类已经被扩展为新的to_s方法,但是这个扩展只能影响到test对象自己 ,其他的string对象还是原来的方法.

我的理解: 基于对象的类通过指令"<<" 来定义, 他能够扩展并且只能扩展被定义的对象, 同时不能影响系统中其他同类型的对象
"<<"指令可以用来临时修改一个对象,此外,这个指令还可以用来定义类的方法, 一般定义类方法是通过如下语法

class Test 
        def Test.say 
                "hello" 
        end 
end

如果嫌需要写多次类名麻烦,可以通过self替换

class Test 
        def self.say 
                "hello" 
        end 
end

有了"<<"指令,还可以这样来

class Test 
        class << self 
                def say 
                        "hello" 
                end 
        end 
end

上述三者的定义是等价的,而且在ruby源代码中很容易看到第三种用法
 
解释: 在ruby中,每一个类都有一个唯一实例的metaclass. 类定义的方法都存在这个metaclass中
通过"<<"对这个唯一实例的metaclass作扩展,给metaclass增加方法和直接给这个类增加方法是一样的效果

转载于:https://www.cnblogs.com/baoz/archive/2005/11/19/2269884.html

ruby笔记 基于对象的类(object specific class)相关推荐

  1. java.lang包—对象基类Object

    原文作者:Boblim 原文地址:Java:Object类详解 目录 一.上帝类 二.Object的类方法 三.常见面试题 Java的一些特性会让初学者感到困惑,但在有经验的开发者眼中,却是合情合理的 ...

  2. Java学习_day008面向对象(OOP):对象和类

    面向对象:OO 面向对象的分析:OOA 面向对象的设计:OOD 面向对象分析与设计:OOAD--目标 面向对象的编程:OOP--起始点 高质量代码的要求(OO终极目标):复用性好.拓展性好.维护性好. ...

  3. 《Essential C++》读书笔记 之 基于对象编程风格

    <Essential C++>读书笔记 之 基于对象编程风格 2014-07-13 4.1 如何实现一个class 4.2 什么是Constructors(构造函数)和Destructor ...

  4. C++学习笔记-第4单元-对象和类(基础)

    C++学习笔记 文章目录 C++学习笔记 第4单元 对象和类(基础) 单元导读 4.1 用类创建对象 4.1.1 对象和类 4.1.2 创建对象并访问 4.2 对象拷贝.分离声明与实现 4.2.1 对 ...

  5. java学习笔记6--类的继承、Object类

    接着前面的学习: java学习笔记5--类的方法 java学习笔记4--类与对象的基本概念(2) java学习笔记3--类与对象的基本概念(1) java学习笔记2--数据类型.数组 java学习笔记 ...

  6. java怎么给类中的私有变量赋值_Java核心技术笔记分享------第二章 类与对象

    对象与类 一.面向对象思想的概述 1>面向对象与面向过程: 二者都是一种思想,面向对象是相对于面向过程而言的.面向过程强调的是功能行为.面向对象,将功能封装进对象,强调具备了功能的对象. 面向对 ...

  7. CoreJava 笔记总结-第四章 对象与类

    文章目录 第四章 对象与类 使用预定义类 对象与对象变量 Java库中的LocalDate类 更改器方法和访问器方法 ==用户自定义类== 用`var`声明局部变量 使用`null`引用 隐式参数与显 ...

  8. 笔记35 笨办法学python练习42对象、类、从属关系和部件关系

    笔记35 笨办法学python练习42对象.类.从属关系和部件关系 一.类.对象与从属关系 这个练习是一个有点哲学意味的练习,讨论对象和类的关系,也就是从属关系.对象不就是下属于某个类的子类,或者个体 ...

  9. python 类继承object_python-面向对象-17-继承/object类/mro方法

    1.继承的基本概念 继承是面向对象程序设计的重要特征,也是实现"代码复用"的重要手段. 如果一个新类继承自一个设计好的类,就直接具备已有类的特征,这样就大大降低了工作难度,因为很多 ...

最新文章

  1. 在Mac上通过VMware Fushion 15.1配置静态IP虚拟机实录
  2. linux nohup 英文全称 no hang up(
  3. ASP.NET 安全认证(一)
  4. 怎样在项目中使用git以及github管理(图文详解流程讲解)
  5. 软件测试人员:如何优秀的提Bug?
  6. 用pycharm写python老是提示错误_python pycharm错误集锦
  7. 11.C 语言连接 MySQL
  8. 第七代电子计算机,基于全新第七代智能英特尔®酷睿™处理器的最佳PC全面来袭...
  9. MYSQL 某个数据库下所有表的 批量删除表语句
  10. 啦啦外卖独立版配送小程序(黑色UI风格)
  11. 人工智能之父艾伦·麦席森·图灵
  12. 使用WPF技术模拟手机界面
  13. Windows程序设计——Ellipse函数画圆及不用Windows自带的画椭圆函数画椭圆
  14. 萌娃第一台电动车哪吒魔小童正式交付
  15. 小程序sketch_第2部分sketch3d设计应用程序
  16. CMDN Club每周精选(第4期)
  17. Python 为什么不支持 switch 语句?
  18. Threejs系列--10游戏开发--沙漠赛车游戏【基础事件处理器】
  19. 意甲-因扎吉帽子戏法卡卡传射 AC米兰5-1追平尤文
  20. 记录周三12.8的刷题心得ODAY

热门文章

  1. Codeforces Round #323 (Div. 2): C. GCD Table(思维题)
  2. hihocoder 1457 : 后缀自动机四·重复旋律7(后缀自动机+拓扑序BFS)
  3. bzoj 3495: PA2010 Riddle(2-SAT)
  4. 杨辉三角形(简明易懂)
  5. [python+pip] 使用pip将函数库安装到Python环境或Anaconda环境
  6. python后台架构Django教程——manage.py命令
  7. 【Proteus仿真8086】定时器8253产生波形发生器
  8. mybatis问题。foreach循环遍历数组报错情况,及其解决方法
  9. 使用IDEA创建一个Maven Web工程:无法创建Java Class文件
  10. (1)什么是socket(套接字)