[ruby-dev:39927] [Bug #2533] sample/occur2.rb is old-fashioned

From: Yuki Sonoda <redmine@...>
Date: 2009-12-27 00:25:56 UTC
List: ruby-dev #39927
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

In This Thread

Prev Next