LBQ 发表于 2013-4-20 10:26
匿名函数感觉死活也讲不好=-=。。。
简言之: class_eval从“类”的层次操纵对象,而非“对象/实例”的层次。理解这句话,首先要知道这点:
Ruby中的类也是一个对象。是Class类的一个实例。特别的,Class类是Class类的一个实例。
A.instance_eval ==> 强调A是一个实例,而不是从类的层面上考量
A.class_eval ==> 强调A是一个类
导致的结果就是
A.instance_eval { def a puts "1" end } # ==> def A.a puts "1" end A.class_eval { def b puts "2" end } # ==> class A def b puts "2" end end
A.instance_eval {
def a
puts "1"
end
}
# ==>
def A.a
puts "1"
end
A.class_eval {
def b
puts "2"
end
}
# ==>
class A
def b
puts "2"
end
end
另外,以前翻译过Ruby元编程系列教程:http://deathking.is-programmer.com/posts/29100.html
分清楚集合和元素之间的关系是很重要的,不然就会出现类似于罗素悖论这种逻辑上的错误。 |