美文网首页
Ruby元编程笔记——4.类定义

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

作者: CharlesZhangCh | 来源:发表于2018-01-15 09:12 被阅读7次

类定义揭秘

当前类小结

  • 在类定义中,当前对象self就是正在定义的类。
  • Ruby解释器总是追踪当前类(模块)的引用。所有使用def定义的方法都成为当前类的实例方法。
class MyClass
  def method_one
    def method_two
      'Hello!'
    end
  end
end
obj = MyClass.new
obj.method_one
obj.method_two                     # => "Hello!"
  • 在类定义中,当前类就是self——正在定义的类。
  • 如果有一个类的引用,则可以用class_eval()(或module_eval())方法打开这个类。

类变量

类变量与类实例变量不同,它可以被子类或类的实例所使用。
不幸的是,类变量有一个很不好的怪癖。下面是一个例子:

@@v = 1
class MyClass
  @@v = 2
end
@@v        # => 2

得到这样的结果是因为类变量并不真正属于类——它们属于类体系结构。由于@@v定义于main的上下文,它属于main的类Object……所以也属于Object的所有后代。MyClass继承自Object,因此它也共享了这个类变量。

单件方法

只针对单个对象生效的方法,称为单件方法。

str = 'hello'
def str.title?
  self.upcase == self
end

关于类方法的真相

def object.method
end

在上面的定义中,object可以是对象引用、常量类名或self。在这三种方式中,定义的语法可能看起来有些不同——但实际上,底层的机制都是一样的。

类宏

Eigenclass

image.png
image.png

大一统理论

Ruby对象模型可以总结为7条规则:
1.只有一种对象——要么是普通对象,要么是模块。
2.只有一种模块——可以是普通模块、类、eigenclass或代理类(把模块混合进入到祖先链中)。
3.只有一种方法——它存在于一种模块中——通常是类中。
4.每个对象(包括类)都有自己的“真正的类”——要么是普通类,要么是eigenclass。
5.除了BasicObject类无超类外,每个类有且只有一个超类。这意味着从任何类只有一条向上直到BasicObject的祖先链。
6.一个对象的eigenclass的超类是这个对象的类;一个类的eigenclass的超类是这个类的超类的eigenclass。
7.当调用一个方法,Ruby先向“右”迈一步进入接收者真正的类,然后向“上”进入祖先链。这就是Ruby查找方法的全部内容。


image.png

Object.extend

环绕别名

1.给方法定义一个别名。
2.重定义这个方法。
3.在新的方法中调用老的方法。

相关文章

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

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

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

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

  • 《Ruby 元编程》读书笔记五:类定义

    类定义 定义类或模块时,其自身充当了当前对象self的角色。类和模块也是对象,与方法和块相同,类定义也会返...

  • Ruby元编程(蛋人)

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

  • 元编程:类定义

    1.类定义和当前类 2.类实例变量 3.类变量 4.使用Class定义类 5.单件方法 6.类宏 7.单件类 8....

  • 元编程-类定义

    类定义 注意: 类也是对象 当前类 在程序顶层,当前类为main对象的类 Object class 打开一个类时(...

  • Ruby元编程笔记 - 方法

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

  • Ruby元编程笔记 - Block

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

  • From Objective-C to Ruby(4)-类和模块

    类 定义类 OC: ruby: 初始化方法 OC: ruby: 实例变量和属性 OC: ruby: 类方法和对象方...

  • Ruby元编程

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

网友评论

      本文标题:Ruby元编程笔记——4.类定义

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