From: Daniel Doel Date: 2004-01-24T08:39:22+09:00 Subject: Re: detecting default parameters Ian Macdonald wrote: > Hello, > > Does anyone know of a way to detect whether default parameters are > beingused in a method? I'm looking for something like the pseudo- > method'default?' in the following example: > > def my_method(foo='bar') > if foo.default? > puts "warning: default value #{foo} being used for 'foo'" > end > end > > I suspect Ruby no longer holds any state at this point to reflect the > fact that the caller did not supply a parameter, but I'm hoping > there'ssome way to do it. Try this: #!/usr/bin/ruby class Object def default? false end end def default(obj) defparam = obj.clone class << defparam def default? true end end defparam end def foo(bar=(default 'foo')) if bar.default? puts "default" else puts "custom" end puts bar end foo 'baz' foo This might be as close as you'll get. It doesn't work for everything, though, since you can't clone everything, and I don't want to redefine #default? on things you can't clone (like Fixnums) since that'd make things wrong. - Dan