[前][次][番号順一覧][スレッド一覧]

ruby-changes:17662

From: tenderlove <ko1@a...>
Date: Wed, 3 Nov 2010 06:25:14 +0900 (JST)
Subject: [ruby-changes:17662] Ruby:r29670 (trunk): * ext/psych/lib/psych/visitors/visitor.rb (accept): switch to

tenderlove	2010-11-03 06:24:54 +0900 (Wed, 03 Nov 2010)

  New Revision: 29670

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=29670

  Log:
    * ext/psych/lib/psych/visitors/visitor.rb (accept): switch to
      a dispatch cache rather than case / when statement.

  Modified files:
    trunk/ChangeLog
    trunk/ext/psych/lib/psych/visitors/visitor.rb

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 29669)
+++ ChangeLog	(revision 29670)
@@ -1,3 +1,8 @@
+Tue Nov  2 22:47:08 2010  Aaron Patterson <aaron@t...>
+
+	* ext/psych/lib/psych/visitors/visitor.rb (accept): switch to
+	  a dispatch cache rather than case / when statement.
+
 Tue Nov  2 21:46:52 2010  Kouhei Sutou  <kou@c...>
 
 	* NEWS: fix a typo.
Index: ext/psych/lib/psych/visitors/visitor.rb
===================================================================
--- ext/psych/lib/psych/visitors/visitor.rb	(revision 29669)
+++ ext/psych/lib/psych/visitors/visitor.rb	(revision 29670)
@@ -11,17 +11,18 @@
       end
 
       def accept target
-        case target
-        when Psych::Nodes::Scalar   then visit_Psych_Nodes_Scalar target
-        when Psych::Nodes::Mapping  then visit_Psych_Nodes_Mapping target
-        when Psych::Nodes::Sequence then visit_Psych_Nodes_Sequence target
-        when Psych::Nodes::Alias    then visit_Psych_Nodes_Alias target
-        when Psych::Nodes::Document then visit_Psych_Nodes_Document target
-        when Psych::Nodes::Stream   then visit_Psych_Nodes_Stream target
-        else
-          raise "Can't handle #{target}"
-        end
+        visit target
       end
+
+      private
+
+      DISPATCH = Hash.new do |hash, klass|
+        hash[klass] = "visit_#{klass.name.gsub('::', '_')}"
+      end
+
+      def visit target
+        send DISPATCH[target.class], target
+      end
     end
   end
 end

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]