I m宣读了Programing Duncan 1.9的Metaprogramming section of 和I m,在stat_eval
/_exec
vsinstance_eval
//_instance_exec
之间对的内分>。
首先,我的理解是<代码>f。 在<代码>本身的方法表中添加一个方法。 (类别物体):
class A
puts self # => A
def foo; 42; end # added to the method table of self, so becomes an instance method
end
A.new.foo # => 42
如果我们使用<条码>等值_eval,我们就采取同样的行动:
A.class_eval do
puts self # => A
def bar; 42; end # same as above
end
A.new.bar # => 42
但是,<代码>instance_eval中的一些内容。 情况不同:
A.instance_eval do
puts self # => A
def baz; 42; end # added to the method table of an anonymous
# singleton class of self, so becomes a class method
end
puts A.baz # => 42
s = string
s.instance_eval do ... end # same behavior, so now def creates an instance method
因此,我理解<代码>_eval和instance_eval
之间的功能差异。
但<代码>_eval和_instance_eval
各栏目中的情形见exactly 具体来说,<代码>本身指明了同一物体, local_variables
也一样。 因此,在制作<条码>f条码>的区块内发生的情况如何不同?
我是否可以阅读一些文件? The RDoc for instance_eval和 无帮助。 看看来文方,instance_eval 似乎设立了单一州级物体,而_eval。 否——但这种区别在《刑法》之外在鲁比拉一级是否明显?