gao*_*ols 8 ruby metaprogramming self
instance_eval方法在其块中更改self,例如:
class D; end
d = D.new
d.instance_eval do
puts self # print something like #<D:0x8a6d9f4>, not 'main'!
end
Run Code Online (Sandbox Code Playgroud)
如果我们定义一个方法selfelf(或任何其他方法(除了instance_eval)接受一个块),当print self时,我们将得到'main',这与instance_eval方法不同.eg:
[1].each do |e|
puts self # print 'main'
end
Run Code Online (Sandbox Code Playgroud)
如何定义像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
Run Code Online (Sandbox Code Playgroud)
Foo.new.bar {置身}
产量
#<Foo:0x100329f00>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3736 次 |
最近记录: |