我有一个对象,tree
。tree
有一个属性,tree.elements
。tree.elements
是一个包含元素和可能的其他子树的数组,这些子树又将有自己的elements
数组,依此类推。
如果树中的对象属于某个类,我需要一个能够替换树中对象的方法。问题是替换内联元素。
显然,以下方法不起作用:
[1,2,3].each { |n| n = 1 }
# => [1,2,3]
但是,这将:
a = [1,2,3]
a.each_with_index { |n, idx| a[idx] = 1 }
# => [1,1,1]
但是,我使用递归函数进行循环,并用内容替换占位符,如下所示:
def replace_placeholders(elements)
elements.each do |e|
if e.respond_to?(:elements) and e.elements.any?
replace_placeholders(e.elements)
elsif e.is_a? Placeholder
e = "some new content" # << replace it here
end
end
end
跟踪指数真的很复杂。我试过e.replace("some new content")
了,但这不起作用。解决这个问题的最佳方法是什么?