gpt4 book ai didi

ruby - 将方法包含到 block 中

转载 作者:数据小太阳 更新时间:2023-10-29 08:21:42 25 4
gpt4 key购买 nike

如果可能的话,有人知道如何让它工作吗?

class Foo
def self.go(&block)
class << block
include Bar
end
puts "Within Foo#go: #{block.methods.include? 'baz'}"
block.call
end
end

module Bar
def baz
puts "I'm happily in my place!"
end
end

Foo.go {
puts "Within actual block: #{methods.include? 'baz'}"
baz
}

这得到输出:

Within Foo#go: true
Within actual block: false
NameError: undefined local variable or method ‘baz’ for main:Object

编辑:当我在 Foo#go 中打印 block 的类时,它是 Proc,但是当我在 Proc 中打印它时,它是对象。这可能相关吗?

最佳答案

你不能这样做。您所看到的原因是这里有两种不同的上下文。一个是 block 的上下文,即 closes over定义它的上下文。另一个是 Proc 对象包装器的上下文,它与任何其他对象上下文相同,与 block 本身的上下文完全无关。

我认为您最接近的是 instance_eval 使用具有您想要的方法的上下文对象的 block ,但是该 block 将无法访问 self 存在于它被定义的地方。这对您要编写的方法是否有意义取决于您。

另一种选择是将 block 传递给 baz 方法的实际接收器。

关于ruby - 将方法包含到 block 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2381927/

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