あづみです。

YANAGAWA Kazuhisa wrote:
> Dir.[] は Dir.glob の alias です.結果の配列に用がないなら collect よ
> り素直に each を使う方がいいんじゃないかと.配列が空かどうかなら
> Array#empty? でよさそう.ということで,
> 
>     ruby -e 'Dir["./**/"].each {|d| Dir[d+"*"].empty? and open(d+".keep_me", "w"){}}'

collect を使ったのはその場ですぐに each が出てこなかったからです。
後から自分で見て「なんで collect やねん…」と思いました。
Dir.[] や Array#empty? があったかぁ…勉強が足りないなぁ。

しかし、未だに if とか条件文以外で and や or を使うことに慣れません。

 
> `.' で始まる名前に対応しようとすると `Dir["**/{.[^.]*,.??*,*}/"' なん
> て伸びるし.それだったらわかりやすさを優先して
> `Dir.entries(path).reject {|d| d =~ /^\.\.?$/}' かな.
> でもこれだとディレクトリかどうかの判定を入れなきゃならなくてますます伸
> びる.... Rescue した上で無視するっていう手も使えるけど,伸びるのにはか
> わらない.

というのを出題者に言ったら「他のも一緒(.?? は無視)だから大丈夫」とい
う答えが。
# du 使ったやつは違いますが、こっちは 0byte のファイルが検知できない

 
> 問題設定が「空でないディレクトリを探す,もしくはそこに .keep_me という
> ファイルを作る」なのにでてる案がみんな「空のディレクトリに .keep_me を
> 作る」になっているのはなぜ? とかいってみたり :-)

それはおそらく元の出題が IRC で出て、それを何に使うかみんな知ってた
からでしょう^^;


安積伸弥
adzumi / denpa.org