From: Robert Klemme Date: 2006-02-14T18:38:25+09:00 Subject: Re: Generic method without case/when? Paatsch, Bernd wrote: > I like to write a generic method that calls different functions > depending on what string I parse to the method (see example) without > having to use a case-when? Is there a way to do that? > > Process_easy("aFile", "Summer") > > def process_easy(file, what) > > if file.include?("#{what}#{NL}") then > constructor = CategoriesFactory.start_what # this is wrong. I > like to substitute and have: constructor = > CategoriesFactory.start_summer start = file.index("Summer#{NL}") > return constructor > # etc > end Difficult to tell from this example. You could use send as Tim suggested. But you might as well use a different approach: - extract a class name from the string - extract another string from the string and map that via a Hash to a lambda / class whatever MAP = { "what" => lambda {|x| puts "doing what #{x}"}, "Summer" => lambda {|x| puts "it's summer"}, } def process_easy(file) cmd = MAP[file[/\w+$/m]] and cmd[file] end Kind regards robert