From: Yuki Sonoda Date: 2009-12-27T09:25:56+09:00 Subject: [ruby-dev:39927] [Bug #2533] sample/occur2.rb is old-fashioned Bug #2533: sample/occur2.rb is old-fashioned http://redmine.ruby-lang.org/issues/show/2533 起票者: Yuki Sonoda ステータス: Open, 優先度: Normal 担当者: Yukihiro Matsumoto, Target version: 1.9.2 ruby -v: ruby 1.9.2dev (2009-12-24 trunk 26168) [i386-darwin9.8.0] Kernel#splitが無くなったことでsample/occur2.rbが動かなくなっていたのでr26180で修正しました。 それにしてもsample/occur2.rbは、今から見るとあまり良くないように思えます。 暗黙の変数を使うあたりがあまり現代Ruby的でなく、無意味にNil#+(Integer)のNameErrorでキーの不在をフォローしているのが教育上好ましくないと思います。 例外を使ってみるとか、何らかの意図があったんでしょうか。 現代語としては次のようになるのが自然ではないかと思いますが、いかがでしょうか。もし良ければ差し替えたいと思います。 diff --git a/sample/occur2.rb b/sample/occur2.rb index 22cf520..ca87d0d 100644 --- a/sample/occur2.rb +++ b/sample/occur2.rb @@ -1,13 +1,10 @@ # word occurrence listing # usege: ruby occur2.rb file.. freq = {} -while gets() - for word in $_.split(/\W+/) - begin - freq[word] += 1 - rescue NameError - freq[word] = 1 - end +ARGF.each_line do |line| + for word in line.split(/\W+/) + freq[word] ||= 0 + freq[word] += 1 end end ---------------------------------------- http://redmine.ruby-lang.org