【发布时间】:2012-02-27 06:09:51
【问题描述】:
instance_eval 方法在其块中改变自身,例如:
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 这样的方法(需要一个块)? 提前致谢。
【问题讨论】:
-
你想达到什么目标?
-
我认为不可能做你想做的事。可能是因为如果你能自己改变自己,那就太混乱了。
标签: ruby metaprogramming self