From: Victor Shepelev Date: 2006-04-15T02:19:36+09:00 Subject: Re: Default value for any type? > -----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 > > T create_default() > > { > > return T(); > > } > > > > //usage: > > create_default(); // => 0.0 > > create_default(); // => "" > > > > 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