已修复:请参见EDIT EDIT
我在编写n叉树的递归each方法时遇到了问题。 @element
是节点的值,@children
是所有连接的下层节点的数组。这是我的方法:
def each
yield(@element)
@children.each { |x|
x.each { |i| yield i}
}
self
end
问题在于它重复了下面的元素。例如,如果我使用这个来打印一个值为o且有一个子节点c的节点,它将打印'occ'而不是'oc'。我真的不知道发生了什么,所以我尝试的所有修复方法都无效。有任何想法吗?
编辑:我认为这可能是因为它在除了yield之外还在节点值上调用了each,所以当它是单个字符的字符串时,它将首先产生该字符,然后使用.each调用再次产生它。
编辑编辑:谢谢大家阅读,但我搞砸了。问题不在这个方法中,而是在同一个类中的另一个方法to_s中。to_s会正确打印,但如果它是字符串,它会更改父节点的值。每次测试时,我总是先使用to_s,甚至没有意识到它。对此感到抱歉。(作为新手,不能自己回答问题)。
@element
和@children
。 - sawa