修正済み: EDIT EDIT を参照
n-ary ツリーに対して独自の再帰的 each を作成するのに問題があります。@element
はノードの値であり、@children
接続されたすべての下位ノードの配列です。これは私の方法です:
def each
yield(@element)
@children.each { |x|
x.each { |i| yield i}
}
self
end
問題は、下の要素を繰り返すことです。たとえば、これを使用して値 o と 1 つの子 c を持つノードを出力すると、「oc」ではなく「occ」が出力されます。何が起こっているのか本当にわからないので、試みた修正はすべて効果がありませんでした. 何か案は?
編集:これは、ノード値を生成するだけでなく、何らかの形でノード値でそれぞれを呼び出しているためである可能性があると思います。そのため、単一文字の文字列の場合、その文字を生成し、.each
呼び出しで再度生成します。
EDIT EDIT: 皆さん、読んでくれてありがとう。問題はこのメソッドではなく、同じクラスの別の to_s にありました。to_s は正しく出力されますが、親ノードが文字列の場合は値が変更されます。私がテストするときはいつでも、いつも to_s を最初に使用していましたが、それを認識していませんでした。これにつきましては申し訳ございません。(私は初心者なので、私自身の質問に答えることはできません)。