Returning argument as a number problem

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

Alle lunedì 13 agosto 2007, Haze N. ha scritto:

1.upto(len) { |i| newpass << chars[rand(chars.length)] }

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

Haze N. wrote:

Hey guys, I have a method as such:

def random(len)
if len !~ /\d+/
pub_send “Invalid number”

Are you aware that if len is a number this will always be true (and it
would
be true no matter what regex you use).

elsif len > 30
pub_send “No more then 30 chars”

You will only get here when len is a string (containing one or more
digits),
so this will raise an error because you can’t compare a string to a
number.

random($1) if $msg =~ /^rand (\d+)/

the value of $1 will always be a number,

No. The value of $1 is always a string. “45” is not a number, it’s a
string
containing the character ‘4’ and ‘5’. 45 is a number.
If you want a number call to_i on the string.

HTH

Oh sweet that works perfect, thanks alot

Sebastian H. wrote:

Haze N. wrote:

Hey guys, I have a method as such:

def random(len)
if len !~ /\d+/
pub_send “Invalid number”

Are you aware that if len is a number this will always be true (and it
would
be true no matter what regex you use).

Yeah i realized that after i got it working, Wasn’t thinking straight,
it wouldn’t work unless there was a number so there was no need for the
regex at all, thanks again

Alle lunedì 13 agosto 2007, Stefano C. ha scritto:

random = ""

it to the function it returns an error saying it cannot compare len to
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