From: Von Fugal Date: 2008-05-17T02:44:59+09:00 Subject: Re: Named sprintf parameters Adam Shelly wrote: > puts "\nMonkeyPatching!\n\n" > class String > alias :old_percent :% > def % arg > arr = (arg.kind_of? Array) ? arg : [arg] > target = self.gsub(/%\((.+?)\)/){|m| > raise ArgumentError, "named parameters need hash" unless > arg.kind_of? Hash > arr << arg[$1.to_sym] > "%#{arr.size}$" > } > target.old_percent arr > end > end Don't forget the escaped %, and also, I propose the format %foo:s instead of %(foo)s. And heres some more code to chew on, based off of Adam's: class String alias old_percent % def % arg names = [] target = gsub /(^|[^%])%(\w+):/ do name, space = $2, $1 # don't forget to replace whatever wasn't % names << name unless names.include? name "#{space}%#{names.rindex(name) + 1}$" end args = case arg when Hash: names.map {|n| arg[n] or arg[n.to_sym]} #keys are often symbols when Array: arg else [arg] end old_percent args end end -- Posted via http://www.ruby-forum.com/.