Ruby单例元编程

class_eval不是所有对象都通用的,事实上它作为单例方法被定义在模块类中,所以它只可以被模块或者单例使用。当你在模块中使用这个方法时,它还有一个别名:Module_eval,这个别名可以让你的代码看上去更加简洁易懂,不过这两个方法在功能上没有任何区别。有一个简单方法去判断这些eval方法的上下文,那就是看方法的接收者。这也就是为什么我们可以使用instance_val访问实例变量,使用class_eval定义实例方法,调用这些方法时,接受者也可以被传递给输入的代码块。在接收方和代码块没有直接关联时这个用法很有用。
class Widget
attr_accessor(:名字,:数量)
def initialize(&姜修艳)
instance_eval(&姜修艳) if 姜修艳
end
end
w=Widget.new do |widget|
widget.名字=“Elbow Grease”
@数量=0
end
print(w.名字)
print(w.数量)
在这里插入图片描述
Effective Ruby-----115页至116页—改善Ruby程序的48条建议-----【美】彼得.J.琼斯著----刘璐、杨政权、秦五一、孟繁超译

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值