Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Ruby > Integer(nil) versus Float(nil) versus String(nil)

Reply
Thread Tools

Integer(nil) versus Float(nil) versus String(nil)

 
 
Christoffer Sawicki
Guest
Posts: n/a
 
      08-23-2006
Dear Rubyists,

def x() yield rescue :error end

[ x { Integer(nil) }, x { Float(nil) }, x{ String(nil) } ]
# => [0, :error, ""]

Isn't that a bit inconsistent?

Cheers,

--
Christoffer Sawicki
http://vemod.net/

 
Reply With Quote
 
 
 
 
Robert Klemme
Guest
Posts: n/a
 
      08-23-2006
Christoffer Sawicki wrote:
> Dear Rubyists,
>
> def x() yield rescue :error end
>
> [ x { Integer(nil) }, x { Float(nil) }, x{ String(nil) } ]
> # => [0, :error, ""]
>
> Isn't that a bit inconsistent?


Is this better?

irb(main):003:0> nil.to_i
=> 0
irb(main):004:0> nil.to_f
=> 0.0
irb(main):005:0> nil.to_s
=> ""

Cheers

robert
 
Reply With Quote
 
 
 
 
Rick DeNatale
Guest
Posts: n/a
 
      08-23-2006
On 8/23/06, Robert Klemme <(E-Mail Removed)> wrote:
> Christoffer Sawicki wrote:
> > Dear Rubyists,
> >
> > def x() yield rescue :error end
> >
> > [ x { Integer(nil) }, x { Float(nil) }, x{ String(nil) } ]
> > # => [0, :error, ""]
> >
> > Isn't that a bit inconsistent?

>
> Is this better?
>
> irb(main):003:0> nil.to_i
> => 0
> irb(main):004:0> nil.to_f
> => 0.0
> irb(main):005:0> nil.to_s
> => ""


Well, I'd say that it confirms that the original case is an inconsistency.

--
Rick DeNatale

My blog on Ruby
http://talklikeaduck.denhaven2.com/

 
Reply With Quote
 
David Vallner
Guest
Posts: n/a
 
      08-24-2006
Christoffer Sawicki wrote:
> Dear Rubyists,
>
> def x() yield rescue :error end
>
> [ x { Integer(nil) }, x { Float(nil) }, x{ String(nil) } ]
> # => [0, :error, ""]
>
> Isn't that a bit inconsistent?
>
> Cheers,
>


Probably.

<rant>
But my Java-addled brain makes me make damn sure nulls / nils don't come
anywhere near I expect actual data, like into collections or numbers. If
you don't rely on automagical conversion to work, it can't bite you if
it doesn't. Just code explicitly.
</rant>

The to_foo and #Foo() type conversion methods being different always
confuses the heck of me, which is why I get paranoid around them. Does
anyone have a link to some rationale for and explanation of the difference?

David Vallner

 
Reply With Quote
 
Christoffer Sawicki
Guest
Posts: n/a
 
      08-28-2006
On 8/24/06, David Vallner <(E-Mail Removed)> wrote:
> Probably.
>
> <rant>
> But my Java-addled brain makes me make damn sure nulls / nils don't come
> anywhere near I expect actual data, like into collections or numbers. If
> you don't rely on automagical conversion to work, it can't bite you if
> it doesn't. Just code explicitly.
> </rant>


That's definitely a valid point, but slightly irrelevant.

> The to_foo and #Foo() type conversion methods being different always
> confuses the heck of me, which is why I get paranoid around them. Does
> anyone have a link to some rationale for and explanation of the difference?


Integer/Float are usually considered to be the *strict* equivalents of
to_i/to_f. Try to feed them non-number strings and you'll see. I don't
know anything more about them though.

Anyway, I was a bit puzzled over these two things on Integer/Float:

1) Them accepting nil at all
2) The (IMHO) inconsistency

I can accept both things as they are, since nothing says they should
act the way I except them to, but I thought it could be good to bring
it up.

Cheers,

--
Christoffer Sawicki
http://vemod.net/

 
Reply With Quote
 
Christoffer Sawicki
Guest
Posts: n/a
 
      09-02-2006
Hello!

On 8/28/06, Robert Dober <(E-Mail Removed)> wrote:
> On 8/28/06, Christoffer Sawicki <(E-Mail Removed)> wrote:
> >
> > On 8/24/06, David Vallner <(E-Mail Removed)> wrote:
> > > Probably.
> > >
> > > <rant>
> > > But my Java-addled brain makes me make damn sure nulls / nils don't come
> > > anywhere near I expect actual data, like into collections or numbers. If
> > > you don't rely on automagical conversion to work, it can't bite you if
> > > it doesn't. Just code explicitly.
> > > </rant>

> >
> > That's definitely a valid point, but slightly irrelevant.

>
>
> Well it is your thread but I understand and agree with David that the nil
> (do not call it null on that list though
> in a conversion is troubeling.
> I read him that way that by banning it a part of your inconsistency will go
> away, do you agree?


Yes, I agree. (But the inconsistency is still there.)

Just for the record, I discovered the behaviour when using FasterCSV
(that emits nil for empty cells) and Integer(x) as a kind of
assertion.

> > The to_foo and #Foo() type conversion methods being different always
> > > confuses the heck of me, which is why I get paranoid around them. Does
> > > anyone have a link to some rationale for and explanation of the

> > difference?
> >
> > Integer/Float are usually considered to be the *strict* equivalents of
> > to_i/to_f.

>
>
> Are they? So far I have never heared that claim.
> http://www.ruby-doc.org/core/classes...l.html#M002003 says the contrary.
> I do not necessarily think that is good, but that is how it is documented.


When discussing this issue on #ruby-lang the general concensus was
that Integer/Float are indeed stricter versions of to_i/to_f. The
Pickaxe says "A call to Integer will work wonders (and will throw an
exception if the input isn't a well-formed integer)". I should also
note that the documentation for Kernel#Integer in the Pickaxe actually
has "Integer(nil) => 0" as an example.

> Try to feed them non-number strings and you'll see.
>
>
> No you will not, "x".to_i Integer("x")


"x".to_i => 0
Integer("x") # ArgumentError: invalid value for Integer: "x"

Isn't that just what I meant?

> > I don't
> > know anything more about them though.
> >
> > Anyway, I was a bit puzzled over these two things on Integer/Float:
> >
> > 1) Them accepting nil at all
> > 2) The (IMHO) inconsistency
> >
> > I can accept both things as they are, since nothing says they should
> > act the way I except them to, but I thought it could be good to bring
> > it up.

>
> I too hope that behavior will go away.


Thanks,

--
Christoffer Sawicki
http://vemod.net/

 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Re: Mozilla versus IE versus Opera versus Safari Peter Potamus the Purple Hippo Firefox 0 05-08-2008 12:56 PM
equal? versus eql? versus == versus === verus <=> Paul Butcher Ruby 12 11-28-2007 06:06 AM
Certification - MCP versus MCSA versus MCSE =?Utf-8?B?Q2FuYWRhX0d1eU0=?= Microsoft Certification 1 08-24-2006 06:33 PM
script versus code versus ? Russ ASP .Net 1 06-10-2004 03:06 AM
HTML Client Control versus. HTML Server Control versus. Web Server Control Matthew Louden ASP .Net 1 10-11-2003 07:09 PM



Advertisments