In article <200104240346.MAA25348 / mx.inac.co.jp>,
TAKAHASHI Masayoshi  <maki / inac.co.jp> wrote:
>Hi,
>
>I like using Hash rather than case-when dispatching.
>
>   class ToolFactory
>
>      @@platform2tool = {
>        "Unix" => Tool_Unix,
>        "PC" => Tool_PC
>      }
> 
>      def ToolFactory.getTool
>        @@platform2tool[$PLATFORM]
>      end
> 
>   end
>
>If you would like to use ruby's native platform information
>as [ruby-talk:14126], you could use Regexp as key.
>
>   class ToolFactory
>
>      @@platform2tool = [
>         [/^(.*)linux$/, Tool_Linux],
>         [/solaris/, Tool_Solaris]
>      ]
> 
>      def ToolFactory.getTool
>        @@platform2tool.each{|platform, klass|
>          if platform =~ RUBY_PLATFORM
>            return klass
>          end
>        }
>        return nil
>      end
> 
>   end

I do like this approach.  The original approach I posted was a translation 
from Perl - but this is much nicer.  So perhaps it isn't 
absolutely neccessary to have a 'getClassFromString' method.


Phil