From: Stefano Crocco Date: 2007-08-14T02:03:15+09:00 Subject: Re: Returning argument as a number problem Alle luned狸 13 agosto 2007, Stefano Crocco ha scritto: > Alle luned狸 13 agosto 2007, Haze Noc ha scritto: > > Hey guys, I have a method as such: > > > > def random(len) > > if len !~ /\d+/ > > pub_send "Invalid number" > > elsif len > 30 > > pub_send "No more then 30 chars" > > else > > chars = ("a".."z").to_a + ("A".."Z").to_a + ("0".."9").to_a > > random = "" > > 1.upto(len) { |i| newpass << chars[rand(chars.length)] } > > pub_send random > > end > > end > > > > and i call the method like so.. > > > > random($1) if $msg =~ /^rand (\d+)/ > > > > the value of $1 will always be a number, but it seems when i am passing > > it to the function it returns an error saying it cannot compare len to > > 30 because the value of len is a string... Any ideas? > > > > Thanks in advance > > No, $1 will always be a string: the $1.. variables are set to the part of > string matching the corresponding group. No conversion is done on it, you > have to do that yourself. So, you should replace the last line with: > > random($1.to_i) if $msg =~ /^rand (\d+)/ > > I hope this helps > > Stefano I forgot you also need to change the beginning of the random method. Since len is now a number, you don't need the first check: def random(len) if len >30 pub_send "No more then 30 chars" else ... Stefano