On Sat, Nov 18, 2006 at 04:31:14AM +0900, Giles Bowkett wrote: > On 11/17/06, Gavin Kistner <gavin.kistner / anark.com> wrote: > >From: jason.dusek / gmail.com [mailto:jason.dusek / gmail.com] On > >> It really is too bad that String.to_f does not throw an exception - or > >> at least return NaN - when the string is not a number. > > > >Float( mystring ) > >does raise an exception, however. > > hmm, I'm new to Ruby too, so I tried this in irb. > > irb(main):001:0> muppet = "3.14" > => "3.14" > irb(main):002:0> muppet.to_f > => 3.14 > irb(main):003:0> muppet > => "3.14" > irb(main):004:0> penguin = "banana" > => "banana" > irb(main):005:0> penguin.to_f > => 0.0 > irb(main):006:0> Float(muppet) > => 3.14 > irb(main):007:0> Float(penguin) > ArgumentError: invalid value for Float(): "banana" > from (irb):7:in `Float' > from (irb):7 > from :0 > irb(main):008:0> exit > > I think String#to_f should probably throw an exception too. actually, > I think whatever the behavior of the two methods is, it should > probably be the same in either case. otherwise you end up with the > kind of API where you have thirty different methods of doing the same > thing, but only two of them work, and of the two that work, neither of > them work all the time. > > it's like, you have Perl's "more than one way to do it" and Python's > "only one way to do it" and you have to be careful about letting these > creatures mate, it's kind of a mad scientist situation, you could end > up with a monster like, "there's more than one way to do it, but only > one of them actually works, and which one it is varies unpredictably." > Nah. Integer( ) works the same way. Think about Float( ) and Integer( ) vs. to_i and to_f being sort of like #to_int vs. #to_i. to_i is like, I want an int out of this, whether this string is an int or not. Integer is like "I have an integer, it just happens to be current represented as a string." > -- > Giles Bowkett > http://www.gilesgoatboy.org