gpt4 book ai didi

ruby - 如何像 instance_eval 方法那样在一个 block 中改变 self 呢?

转载 作者:数据小太阳 更新时间:2023-10-29 06:53:31 27 4
gpt4 key购买 nike

instance_eval 方法在其 block 中改变自身,例如:

class D; end
d = D.new
d.instance_eval do
puts self # print something like #<D:0x8a6d9f4>, not 'main'!
end

如果我们自己定义一个方法(或任何其他方法(除了 instance_eval)需要一个 block ),当打印 self 时,我们将得到 'main',这与 instance_eval 方法不同。例如:

[1].each do |e|
puts self # print 'main'
end

我如何定义一个像 instance_eval 这样的方法(需要一个 block )?提前致谢。

最佳答案

您可以编写一个接受 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 { 放自己 }

产量

#<Foo:0x100329f00>

关于ruby - 如何像 instance_eval 方法那样在一个 block 中改变 self 呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9460736/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com