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.琼斯著----刘璐、杨政权、秦五一、孟繁超译

猜你喜欢

转载自blog.csdn.net/m0_38127487/article/details/114017679