instance_eval 方法在其块中更改 self,例如:
class D; end
d = D.new
d.instance_eval do
puts self # print something like #<D:0x8a6d9f4>, not 'main'!
end
如果我们自己定义一个方法(或任何其他方法(除了instance_eval)需要一个块),当打印self时,我们将得到'main',它与instance_eval方法不同。例如:
[1].each do |e|
puts self # print 'main'
end
我如何定义像instance_eval这样的方法(需要一个块)?
提前致谢。
您可以编写一个接受 proc 参数的方法,然后将其作为 proc 参数传递给 instance_eval。
class Foo
def bar(&b)
# Do something here first.
instance_eval &b
# Do something else here afterward, call it again, etc.
end
end
Foo.new.bar { 把自己放上去 }
Yields
#<Foo:0x100329f00>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)