Hello!

On 8/28/06, Robert Dober <robert.dober / gmail.com> wrote:
> On 8/28/06, Christoffer Sawicki <christoffer.sawicki / gmail.com> wrote:
> >
> > On 8/24/06, David Vallner <david / vallner.net> 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/Kernel.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/