From: Brian Mitchell Date: 2006-04-21T07:00:49+09:00 Subject: Re: Optional Message Parameters? On 4/20/06, Nathan Olberding wrote: > (Warning: Newbie Altert!) > > How do I write a method with optional params? I would think that this: > > def do_this(opt1="", opt2="") > puts opt2 > end > do_this(opt2="This") > > > Would result in "This" being displayed. Instead, "This" becomes the > value of opt1. I'd like to set opt1 and opt2 to default to "". How do I > do that? This is usually a case where you either use * or a hash parameter. * is good for cases where you can distinguish by value. In your case it looks like a hash would be appropriate. def do_this(opts) puts opt[:two] end do_this(:two => "This") Notes: The hash parameter will always be the last parameter (ignoring & args and other odd parameter changes when using super). This means you can pass many things along side the hash, though the more you add the more complex it gets to manage the interface. Rails uses this technique heavily. Have a look at the find() code in ActiveRecord sometime to learn how they manage such an interface (much cleaner in more recent releases). Future major versions of Ruby are going to have actual named parameters. So much to look forward to in 2.0! Brian.