配列の最大深度がわかっている配列を完全にフラット化したい場合、常にその最大深度を引数として渡す方がパフォーマンスの面で優れていArray#flatten
ますか? 例えば、以下の場合、後者よりも前者の方が良いでしょうか?
[[:foo], [:bar], [:baz], ...].flatten(1)
[[:foo], [:bar], [:baz], ...].flatten
レベルを設定するかどうかに関係なく、要素が配列であるかどうかのチェックが行われるため、MRI ではありません。基本的にこれを行います(疑似Ruby、元のCが必要な場合はここから始まります)
array.each do |value|
if !value.is_array? || current_depth >= max_depth
result << value
else
current_depth += 1
recurse ...
end
end
実際の実装は明示的に再帰的ではなく、is_array?
メソッドもありませんが、要点はわかります。
お持ち帰りのメッセージは、ユースケースは常に!value.is_array?
条件に一致し、渡した引数を使用しないため、渡しても何も得られないということです。