博客地址 :《Ruby 元编程》读书笔记 (六)
相关文章:
《Ruby 元编程》读书笔记 (一) 《Ruby 元编程》读书笔记 (二) 《Ruby 元编程》读书笔记 (三) 《Ruby 元编程》读书笔记 (四) 《Ruby 元编程》读书笔记 (五)
传神的头图↓↓↓
像方法一样,类定义也会返回最后一条语句的值:
result = class MyClass
self
end
result #=> MyClass
与当前对象 self 一样,同时还存在当前类(或模块)
Ruby 中并没有类似当前对象 self 一样的明确引用,不过在追踪当前类的时候,可以遵循下面几条:
class C
def m1
def m2; end
end
end
class D < C; end
obj = D.new
obj.m1
C.instance_methods(false) #=> [:m1, :m2]
Module#class_eval方法(别名: module_eval),会在一个已存在的类的上下文中执行一个块。使用该方法可以在不需要 class 关键字的前提下,打开类。
Module#class_eval与Object#instance_eval方法相比,后者instance_eval方法只能修改self,而class_eval方法可以同时修改self与当前类。
此外 class_eval 的另一个优势就是可以利用扁平作用域,规避 class 关键字的作用域门问题。
通常使用 instance_eval 方法打开非类的对象,而用 class_eval 方法打开类定义,然后用 def 定义方法。
-待续-
=============== 最后贴一下自己的公众账号
可以十日不将军,不可一日不拱卒,日拱一卒 (rigongyizu365)