gpt4 book ai didi

ruby - 在 Ruby 中使用猴子修补实例方法时注入(inject)外部作用域

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

<分区>

我有一个容器类 Foo 和一个方法 frob,我想添加一个类似命名的方法,该方法将委托(delegate)给容器,每个包含元素。

第一次尝试

  self.children.each do |c|
def c.frob
self.frob
end
end

但这当然会导致 SystemStackError: stack level too deep,因为此时 selfc。然后我尝试了

  parent = self
self.children.each do |c|
def c.frob
parent.frob
end
end

但是局部变量不是新定义方法的闭包的一部分,所以我得到undefined local variable or method 'parent'

我想出了以下有效的技巧:

  self.children.each do |c|
c.instance_variable_set('@parent', self)
def c.frob
@parent.frob
end
end

但是,它会用这种方法只需要的东西污染 child 的变量空间。如何在保持新定义的方法独立的同时获取 parent/self

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