美文网首页
ruby元编程第二版 学习 - 当前类

ruby元编程第二版 学习 - 当前类

作者: SecondRocker | 来源:发表于2018-06-03 18:05 被阅读16次

15年某次写代码时发现类的instance_eval 里 用 define_method 定义的不是实例方法,而是类方法;当时查了下资料,了解到当前类https://www.jianshu.com/p/xqbKUX(当时简书说随后查下当前类的用法,然而三年过去了..。鄙视下自己!),但一直不太清晰;最近看了ruby元编程第二版,当前类基本弄明白了。

不管处在ruby程序的哪个位置,总存在一个当前对象:self。同样,也总是有一个当前类(或模块)存在。定义一个方法时,那个方法将成为当前类的一个实例方法。
我们可以用self获取当前对象,但是ruby并没有相应的的方式来获取当前类的引用。不过,跟踪当前类并不困难,我们可以查看源代码。

  • 在程序的顶层,当前类是Object,这是main对象所属的类。(这就是你再顶层定义方法会成为Object实力对象的原因。)
  • 在一个方法中,当前类就是当前对象的类。(试着在一个方法中用def 关键字定义另一个方法,你会发现这个新方法会定义在self所属的类中。)
class C
  def m1
    def m2;end
  end
end
C.instance_methods(false) #[:m1,:2]
  • 当用class关键字打开一个类时(或者用module关键字打开模块时),那个类称为当前类。

当前类只影响def 定义的方法归属(截止目前的认知)

def定义的方式是当前类的实例方法

已知有三种方法改变当前类

  • class 打开类,修改当前类为打开的类
  • class_eval修改当前类为调用者
  • instance_eval 修改当前类为调用者的enginclass(这就是为什么A.instance_eval里用def定义的是A的类方法:定义的是A的enginclass的实例方法,这就是类方法,或者说单件方法)

相关文章

  • ruby元编程第二版 学习 - 当前类

    15年某次写代码时发现类的instance_eval 里 用 define_method 定义的不是实例方法,而是...

  • Ruby元编程(蛋人)

    01 Ruby元编程介绍和使用场景02 Ruby的类结构03 Singleton Method单例方法以及supe...

  • Ruby元编程笔记 - 类中的魔法

    Ruby元编程笔记 - 类定义 类定义揭秘 在类定义中,self就是正在定义的类。 所有使用def定义的方法都成了...

  • Ruby元编程

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

  • ruby元编程

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

  • Ruby 代码重构之旅

    在《 Ruby 元编程》一书的第二章 method 中,通过一段代码的重构,来展示 Ruby 的特性,如何以很少的...

  • Ruby元编程笔记——4.类定义

    类定义揭秘 当前类小结 在类定义中,当前对象self就是正在定义的类。 Ruby解释器总是追踪当前类(模块)的引用...

  • 入门编程和英语不得不纠正的观念

    近期付费在学习ruby on rails,在正式开课前听了几节插袋老师(xdite编程大神)的元学习课,对我树立正...

  • ruby元编程(1)

    面试中碰到一些面试官提到的关于ruby元编程的问题的总结 class和module的区别 官方说明class do...

  • Ruby元编程示例

网友评论

      本文标题:ruby元编程第二版 学习 - 当前类

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