From: shugo@... (Shugo Maeda) Date: 1998-04-17T02:26:35+09:00 Subject: [ruby-list:7595] Re: List on List 前田です。 In message "[ruby-list:7582] Re: List on List" Makoto Nukui wrote: |>では,flattenにしようかなあって思います. |>でも,n階層まで平滑化ってよくわかんないなあ.欲しい? | |どういう用途を想定しているかではないでしょうか? |Array を完全に展開してしまうのって結構無駄ですよね。 | |もし単に繰り替えしで使いたいだけなら、 each_deeply の |ようなものを用意したほうがいいのではないでしょうか? |これなら結構使い道はあると思います(特に Dir で)。 module Enumerable def recursive_each(&block) each do |i| if i.respond_to? :recursive_each i.recursive_each(&block) else block.call(i) end end end end という感じでしょうか。 i.respond_to?(:each) && !i.kind_of?(Enumerable)というケースも 考えると、 module Enumerable def recursive_each(&block) __recursive_each(self, &block) end private def __recursive_each(obj, &block) obj.each do |i| if i.respond_to? :each __recursive_each(i, &block) else block.call(i) end end end end とした方が良いのかな。 # ところで、ruby-mode.elで、 # (defconst ruby-block-mid-re # (concat "then\\|else\\|elsif\\|when\\|rescue\\|ensure" # "\\|private$\\|protected$\\|public$")) # としてはどうでしょう。 -- 前田 修吾