> -----Original Message-----
> From: Matthew Desmarais [mailto:desmarm / gmail.com]
> Sent: Friday, April 14, 2006 6:58 PM
> To: ruby-talk ML
> Subject: Re: Default value for any type?
> 
> Victor Shepelev wrote:
> >>> Hello all.
> >>>
> >>> I have code:
> >>>
> >>> def create_default(type)
> >>>   type.new
> >>> end
> >>>
> >>> But with, for example, Float, it suddenly said:
> >>>
> >>> create_default(Float) #<=== undefined method `new' for Float:Class
> >>> (NoMethodError)
> >>>
> >>> Hmmm? How can I uniformly obtain default value for given class?
> >>>
> >> What should the default value for a Float be? What are you trying to
> >> really do here?
> >>
> >> There are a number of classes that you're not going to be able to call
> >> #new on.
> >>
> >
> > Not so long time ago I've been a C++ guy. There we could do:
> > float(); //0.0
> > int(); //0
> > ...etc...
> >
> > Generalized version:
> > template<typename T>
> > T create_default()
> > {
> >   return T();
> > }
> >
> > //usage:
> > create_default<float>();       // => 0.0
> > create_default<std::string>(); // => ""
> >
> > and so on. I think, argument-less constructor, creating some "default"
> > value, is a very useful thing.
> >
> > (yes, I can define Float#default and so on for myself ;) But I want to
> know,
> > *why*?)
> >
> >
> >
> >> -austin
> >> --
> >> Austin Ziegler * halostatue / gmail.com
> >>                * Alternate: austin / halostatue.ca
> >>
> >
> > Victor.
> >
> Hi Victor,
> 
> I think that Austin's question about what you are trying to accomplish
> is probably a good. one.  If you can post some Ruby code that would rely
> on something like this that would be great.  Maybe the folks on the list
> can help you find a solution for you.
 
Hmmm... Maybe I beginning to understand your point. The task was: before
serializing (or storing in DB) some complex class, ensure that all fields
aren't nil. I does some metaprogramming, so description of the fields looked
like:

class Something
  data :name, String, :default => ''
  data :price, Float, :default => 0.0
  data :quan, Fixnum, :default => 0
  data :type, String, :default => 'unknown'
  data :coef, Float , :default = > 1.0

  def store_in_db
    self.validate!
    ....
  end
  
  def validate!
    #ensure each field isn't nil and has right type; 
    #set it's value to default in other case
  end
end

(I hope the code above is quite self-explaining.)
Later I saw that most of default values seems to like "empty value" of the
corresponding type (I was C++ guy, remember). So, I want not to write
:default => ... for :name, :price, :quan

But after this topic (and Austins and yours answers) I think that overall
construction don't looks very rubyish. Maybe, I must look for alternatives.

> Regards,
> Matthew Desmarais

Victor