Forum: Ruby Default value for any type?

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
2c7c807a1df0c76a8fc823c709b501a9?d=identicon&s=25 Victor Shepelev (Guest)
on 2006-04-14 16:25
(Received via mailing list)
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?

Victor.
31ab75f7ddda241830659630746cdd3a?d=identicon&s=25 Austin Ziegler (Guest)
on 2006-04-14 16:44
(Received via mailing list)
On 4/14/06, Victor Shepelev <vshepelev@imho.com.ua> wrote:
> 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.

-austin
2c7c807a1df0c76a8fc823c709b501a9?d=identicon&s=25 Victor Shepelev (Guest)
on 2006-04-14 16:59
(Received via mailing list)
> > 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.
81d609425e306219d54d793a0ad98bce?d=identicon&s=25 Matthew Moss (Guest)
on 2006-04-14 17:45
(Received via mailing list)
On 4/14/06, Victor Shepelev <vshepelev@imho.com.ua> wrote:
> create_default(Float) #<=== undefined method `new' for Float:Class
> (NoMethodError)
>
> Hmmm? How can I uniformly obtain default value for given class?


class Float
  def Float.new
    0.0
  end
end
1fba4539b6cafe2e60a2916fa184fc2f?d=identicon&s=25 unknown (Guest)
on 2006-04-14 17:51
(Received via mailing list)
Hi --

On Fri, 14 Apr 2006, Victor Shepelev wrote:

>>> create_default(Float) #<=== undefined method `new' for Float:Class
> Not so long time ago I've been a C++ guy. There we could do:
>
> //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*?)

I guess that's what I want to know too: why would you expect Ruby
classes to have default instances, and why would you need them too?


David

--
David A. Black (dblack@wobblini.net)
Ruby Power and Light, LLC (http://www.rubypowerandlight.com)

"Ruby for Rails" coming in PDF April 15, and in paper May 5!
http://www.manning.com/black
0817571d150afead454f4220007042fe?d=identicon&s=25 Matthew Desmarais (Guest)
on 2006-04-14 18:00
(Received via mailing list)
Victor Shepelev wrote:
>>> create_default(Float) #<=== undefined method `new' for Float:Class
>
> }
>
>
>
>> -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.

Regards,
Matthew Desmarais
1fba4539b6cafe2e60a2916fa184fc2f?d=identicon&s=25 unknown (Guest)
on 2006-04-14 18:43
(Received via mailing list)
On Sat, 15 Apr 2006, dblack@wobblini.net wrote:

> I guess that's what I want to know too: why would you expect Ruby
> classes to have default instances, and why would you need them too?

s/too\?/to?/ :-)


David

--
David A. Black (dblack@wobblini.net)
Ruby Power and Light, LLC (http://www.rubypowerandlight.com)

"Ruby for Rails" coming in PDF April 15, and in paper May 5!
http://www.manning.com/black
2c7c807a1df0c76a8fc823c709b501a9?d=identicon&s=25 Victor Shepelev (Guest)
on 2006-04-14 19:20
(Received via mailing list)
> >>>
> >>>
> > ...etc...
> > create_default<std::string>(); // => ""
> >> -austin
> 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
25e11a00a89683f7e01e425a1a6e305c?d=identicon&s=25 Wilson Bilkovich (Guest)
on 2006-04-14 19:35
(Received via mailing list)
On 4/14/06, Victor Shepelev <vshepelev@imho.com.ua> wrote:
> > >>>
> > >>>
> > > float(); //0.0
> > > //usage:
> > >
> >
> class Something
>
>
> 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.
> >

This reminds me of the Metakoans quiz, actually:
http://www.rubyquiz.com/quiz67.html

If you haven't seen that, it may give you some ideas.

--Wilson.
2c7c807a1df0c76a8fc823c709b501a9?d=identicon&s=25 Victor Shepelev (Guest)
on 2006-04-14 19:51
(Received via mailing list)
> This reminds me of the Metakoans quiz, actually:
> http://www.rubyquiz.com/quiz67.html
>
> If you haven't seen that, it may give you some ideas.

Ooooooh! Looks really very interesting. Studying.
Big thanks!

> --Wilson.

Victor.
This topic is locked and can not be replied to.