美文网首页RubyRuby、Rails知识
Ruby元编程笔记——1.对象模型

Ruby元编程笔记——1.对象模型

作者: CharlesZhangCh | 来源:发表于2017-12-15 08:56 被阅读10次

打开类

在Ruby中,定义类的语句和其他语句没有本质区别,你可以在类定义中放置任何语句。

class C
  puts "Hello"
end
=> Hello

Ruby的class关键字更像是一个作用域操作符而不是类型声明语句。你总是可以重新打开已经存在的类并对它进行动态修改。

class D
  def x
    puts 'x'
  end
end

class D
  def y
    puts 'y'
  end
end

obj = D.new
obj.x            # => x
obj.y            # => y

类的真相

对象中有什么

实例变量

instance_variables

方法

methods

类自身也是对象


常量

任何以大写字母开头的引用(包括类名和模块名),都是常量。

方法查找

向右一步,再向上


image.png

当你在一个类中包含一个模块时,Ruby创建了一个封装该模块的匿名类,并把这个匿名类插入到祖先链中,其在链中的位置正好包含在她的类上方。


包含模块的方法查找

执行方法

每一行代码都会在一个对象中被执行——这个对象就是所谓的当前对象。当前对象也可以用self表示。
当开始运行Ruby程序时,Ruby解释器会创建一个名为main的对象作为当前对象,这个对象有时被称为顶级上下文(top level context)。
在类和模块定义中(并且在任何方法定义之外),self的角色由这个类或模块担任:

class MyClass
  self           # => MyClass
end

小结

  • 对象由一组实例变量和一个类的引用组成。
  • 对象的方法存在于对象所属的类中(从类的角度看,它们叫做实例方法)。
  • 类本身是Class类的对象。类的名字只不过是一个常量而已。
  • Class类是Module的子类。一个模块基本上是由一组方法组成的包。类除了具有模块的特性之外,还可以被实例化(通过new()方法)及被组织为层次结构(通过它的superclass()方法)。
  • 常量像文件系统一样,是按照树形结构组织的。其中模块和类的名字扮演目录的角色,其他普通的常量则扮演文件的角色。
  • 每个类都有一个祖先链,这个链从自己所属的类开始,向上直到BasicObject类结束。
  • 每调用一个方法时,Ruby首先向右一步来到接收者所属的类,然后一直向上查找祖先链,直到找到该方法,或者到达链的顶端为止。
  • 每当类包含一个模块时,该模块会被插入到祖先链中,位置在该类的正上方。
  • 当调用一个方法时,接收者会扮演self的角色。
  • 当定义一个模块(或者类)时,该模块扮演self的角色。
  • 实例变量永远都被认定为self的实例变量。
  • 任何没有明确指定接收者的方法调用 ,都当成是调用self的方法。

相关文章

  • Ruby元编程笔记——1.对象模型

    打开类 在Ruby中,定义类的语句和其他语句没有本质区别,你可以在类定义中放置任何语句。 Ruby的class关键...

  • Ruby元编程笔记 - 对象模型

    Tips 类名不过是常量 对象包含了实例变量,它就好像一个Hash表一样。 方法存放在类之中。 类自身也是对象 所...

  • Ruby 对象模型的复习

    最近复习了下 ruby 对象模型的知识,参照了 Ruby Metaprogramming,于是边看边做笔记,还是收...

  • 2016-11-05 task-list

    今日任务 ruby on rails 第6章 ruby 元编程 第3章 总结 数据库迁移生成User模型 注意:控...

  • 元编程:对象模型

    第一章节的内容是对象模型,相对来说比较简单,本篇文章先直接总结知识点,其实以后再回过头来看本篇文章的时候直接看知识...

  • Ruby元编程笔记 - 方法

    Dynamic Method 通过send()去动态调用方法: 在Ruby2.2.2中,send()依然可以调用私...

  • Ruby元编程笔记 - Block

    Block不是对象,应通将其转为proc进行传递。 作用域门 Scope Gate 作用域门一共有三个:modul...

  • Ruby 对象模型

    对象模型 面试被问了几次 Ruby 的对象模型,也有被要求画出来对象模型图,查找资料后,手动画了几遍。关键词可以搜...

  • Ruby元编程

    类 方法 代码块 类宏 Eval方法 实例变量、方法、类 实例变量(Instance Variables)是当你使...

  • ruby元编程

    对象模型 所有class定义之外的代码默认运行在顶级对象main中。 打开类 ruby的class更像是一个作用于...

网友评论

    本文标题:Ruby元编程笔记——1.对象模型

    本文链接:https://www.haomeiwen.com/subject/ewvsixtx.html