On Tue, 1 Feb 2005 17:10:50 +0900, Robert Klemme <bob.news / gmx.net> wrote: > > "Matt Mower" <matt.mower / gmail.com> schrieb im Newsbeitrag > news:d563731905013110444211811e / mail.gmail.com... > > Hi Robert, > > > > On Tue, 1 Feb 2005 03:30:46 +0900, Robert Klemme <bob.news / gmx.net> > wrote: > > > > > > "Matt Mower" <matt.mower / gmail.com > schrieb im Newsbeitrag > > > news:d563731905013109382bbeef75 / mail.gmail.com... > > > > Hi. > > > > > > > > I want to dynamically create (i'm trying to use define_method) a > > > > method using which has default values for it's parameters. However > > > > when I try to do: > > > > > > > > define_method "name" lambda { |x=1,y=2,z=3| f(x,y,z) } > > > > > > > > I get a syntax error on the x=1 part. Am I just using the wrong > > > > syntax? Or is it really not possible to create methods with default > > > > parameter values dynamically? > > > > > > I guess you will have to do > > > > > > define_method( "name" ) { |*a| f(a[0]||1, a[1]||2, a[2]||3) } > > > > > > Or something similar. > > > > > > > Ah, thank you -- I had thought of using || to get the defaults but not > > to use |*a| to allow parameters to be passed, or not, which is the > > vital bit. > > > > Since this workaround is a touch unaesthetic I wonder whether there > > was a particular reason for not allowing default values to be > > specified for block parameters? Do you happen to know? > > Dunno, but here's my guess: since blocks are usually called at a single > place in code (as opposed to a method) default parameters do not make much > sense generally. I think that's a good assessment... I think historically, they may have been considered superfluous. But it could change in the future; with the addition of &block syntax in a block's parameter list (available now, in 1.9, and later, in 2.0), it might be that block parameter lists are going to be made more consistent with method parameter lists. Maybe :) cheers, Mark > > Kind regards > > robert > >