http://d.hatena.ne.jp/ku-ma-me/20071110/p1
これはよく共感できますー。特にここ。
逆に、「たためる限りたたみたい」という現状の flatten への需要がどういうときに発生するのか想像できません。
そう、これがなんでこうなってるのかいまいちわからないんですよね。深さ2くらいまでなら、追加する時にpushしないでappendすればいいだけだし。
しかし 1.9 で Array#flatten の引数で展開するレベルが指定できるとは知りませんでした。これは便利。
でもバイナリをよく扱うヒトとしては、 String#[nth] が Integer じゃなくて String を返す仕様はちょっと許容できないというか、これまでこれに依存したものをたくさん書いてしまっているので、移行できないのですよね。なんでこうなったのか不思議。勿論書き直せばいいのですが、pack/unpack以外の方法が思いつかなくて、またpack/unpackを使うためにはいったん一時的なStringオブジェクトを作らないといけない……とか思うとやる気が起きません。