读书笔记《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 :old_match :match
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值