gpt4 book ai didi

ruby - 为什么第二个 'p arg' 报告 Foo 实例?

转载 作者:太空宇宙 更新时间:2023-11-03 18:02:19 25 4
gpt4 key购买 nike

class Foo
def with_yield
yield(self)
end

def with_instance_eval(&block)
instance_eval(&block)
end
end

f = Foo.new

f.with_yield do |arg|
p self
# => main
p arg
# => #<Foo:0x100124b10>
end

f.with_instance_eval do |arg|
p self
# => #<Foo:0x100124b10>
p arg
# => #<Foo:0x100124b10>
end

为什么第二个 'p arg' 报告 Foo 实例?它不应该报告 nil 因为 with_instance_eval 不会产生 self 到 block 吗?

最佳答案

显然在 ruby​​ 1.8 中,instance_eval 不仅将 block 内的 self 值更改为它的接收者,它还会产生该值。在 1.9 中不再是这种情况(arg 在那里将为零),因此不应依赖该行为(我也很确定它没有记录)。

关于ruby - 为什么第二个 'p arg' 报告 Foo 实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1428434/

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