From: ole __ Date: 2007-06-21T07:17:53+09:00 Subject: Code Critique: check if int or float Hello again folks, I'm really starting to like this language. I'm working towards building a simple expression evaluator. I couldn't seem to find any methods for testing whether a string contains an integer or float. In PHP (where I'm from) you've got your is_numeric(). Is there such a method in Ruby? Anyway, under the assumption that there wasn't and to learn a bit I decided to add the methods i? and f? to String. I was wondering if I could get a bit of a critique on this code because I'm still ultra new to Ruby. I'm a TDD maniac, so I've got miself a test case in there too: =============================== class String # Strict test whether the string is a valid integer # Underscores are not permitted. # allowScientific is false by default because "4e3".to_i is 4 def i?(allowScientific = false) if allowScientific return (self =~ /^-?\d+(e-?\d+)?$/) != nil end (self =~ /^-?\d+$/) != nil end # Strict test whether the string is a valid float. # i.e. 4 is not but 4.0 is. Scientific notation acceptable. def f?(allowScientific = true) if allowScientific return (self =~ /^-?\d*\.\d+(e-?\d+)?$/) != nil end (self =~ /^-?\d*.\d+$/) != nil end end require 'test/unit' class StringExtensionsTest < Test::Unit::TestCase def testI assert '45'.i? assert '-3'.i? assert !'3s'.i? assert !'3_000'.i? assert !'3e3'.i? end def testIScientific assert !'e4'.i?(true) assert '4e2'.i?(true) assert '-8e3'.i?(true) assert '-5e-25'.i?(true) end def testFBasic assert !'3'.f?(false) assert '3.0'.f?(false) assert '-25.36'.f?(false) assert '.52'.f?(false) assert '-.14'.f?(false) end def testFScientific assert !'e1'.f? assert !'4e1'.f? assert '3.12e1'.f? assert '-2.0e-3'.f? assert '-.6e2'.f? end end =============================== 4 tests, 19 assertions, 0 failures, 0 errors =============================== Final question, what are your feelings on camelCase and Ruby's apparent shunning of it? -- Posted via http://www.ruby-forum.com/.