读书笔记《Ruby On Rails中文版》第13章

本章知识点
13.1 单例类
     1  定义方法
     a class<<obj
        def twice
    b def str.twice
    c def class<<self
    a,b用于既定义类的实例的单例方法,可用于定义类对象的单例方法,c用于定义类对象的单例方法。
     2  单例类加入模块
     a class << obj
        include M
    b obj.extend(M)
    3 类方法是为Class类的对象定义的单例方法,但是类方法有特别的地方:在为对象定义单例方法时,没有其他对象可以作为该方法调用的接收者;为类对象定义的单例方法可以被该类的子类调用。

13.2 eval 方法族
     instance_eval 常常用于访问对象的私有变量
     class_eval 可以进入类定义体中,
       a 在类定义的上下文对字符串求值
       b 为匿名类(但不包含单例类)打开类定义
       c 获取外围类作用域中变量的访问权
     define_method 暗示着一个扁平化得局部变量作用域,而不是像通用的class和def那样打开新的作用域。

13.3  可调对象
     1 Proc 对象
        作为闭包的Proc对象
        pr = Proc.new{|*x| p x}
       pr.call(1,2)
    2  lamba
       lam = lambda {puts "A lambda!"}
    lambda中的return从lambda 返回,而Proc中的return从外围方法返回
     3 将Proc对象或lambda转换为一个代码块 前面加一个 &
    4 作为对象的方法
       1
      c = C.new
      meth = c.method(:talk)
      meth.call
      unbound = meth.unbind
      unbound.bind(d).call
      2
      unbound =C.instance_method(:talk)
13.4 回调方法和钩子方法
      1 method_missing
     2 Module#include 添加模块方法为类方法
     Module M
       def self.included(c1)
         def c.a_class_method
           puts "Now the class has a new class method"
         end
       end
     end
    3 Class#inherited 
    4 Module#const_missing
13.5 覆盖核心功能
    alias ld_match :match
   
         

你可能感兴趣的:(C++,c,读书,Ruby,Rails)