给出这样的代码:
p = proc do |*args, &block|
p self
p args
p block[] if block
end
q = proc do |*args, &block|
p 'before'
instance_exec(*args, &p)
end
o = Object.new
o.define_singleton_method(:my_meth, q)
o.my_meth(1, 2) { 3 }
Run Code Online (Sandbox Code Playgroud)
我怎样才能完全从呼叫转发p到q在保持q的接收器?基本上我也想打印3,但是instance_exec,像所有红宝石方法一样,只需要一个块.是否有可能不改变p,这样我就可以使用p和q互换(的想法是让q有时包p).
可以定义另一个单例方法:
p = proc do |*args, &block|
p self
p args
p block[] if block
end
q = proc do |*args, &block|
p 'before'
define_singleton_method(:pp, p)
pp(*args, &block)
end
o = Object.new
o.define_singleton_method(:my_meth, q)
o.my_meth(1, 2) { 3 }
Run Code Online (Sandbox Code Playgroud)
输出:
"before"
#<Object:0x007f5903c2de28>
[1, 2]
3
=> 3
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
125 次 |
| 最近记录: |