Newbie question

D

dalesmithtx

First thing's first - if there's a newbie forum where a question like
this would be more appropriate, somebody please point it out to me.

I'm new to Ruby, and I'm trying to pick it up specifically for Watir
testing. I've installed Ruby from the One Click Installer for Windows
three times now, but I keep running into the same issue, so at this
point I figure it must be operator error. The versions I've used so far
are:

ruby186-25.exe
ruby185-24.exe
ruby185-22.exe

Here's the issue I keep running into:

C:\rubysandbox>irb
irb(main):001:0> 1..10.each { |x| puts x }
NoMethodError: undefined method 'each' for 10:Fixnum
from (irb):1
irb(main):002:0>


Why do I keep getting a NoMethodError when I try to use the each()
method on a number?
 
V

vjoel

Dale said:
irb(main):001:0> 1..10.each { |x| puts x }
NoMethodError: undefined method 'each' for 10:Fixnum
from (irb):1
irb(main):002:0>

The problem is that `..' has lower precedence than `.'.

(1..10).each { |x| puts x }

I often forget the ( ) , and have to back up and insert them.
 
B

bbxx789_05ss

Dale said:
Here's the issue I keep running into:

C:\rubysandbox>irb
irb(main):001:0> 1..10.each { |x| puts x }
NoMethodError: undefined method 'each' for 10:Fixnum
from (irb):1
irb(main):002:0>


Why do I keep getting a NoMethodError when I try to use the each()
method on a number?

You aren't *trying* to use each on a number. A number looks like:

1
13.4
5

You are trying to use each on a Range, which looks like:

1..10
a..z

Unfortunately, ruby thinks you are trying to use each on the number 10.
To fix the problem, you need to put parentheses around the range:

(1..10).each

Personally I always type:

1..10.e

and then remember I need the parentheses, which means using each() on a
range requires too much typing. So, I try to do this instead:

10.times do |i|
...
...
end
 
T

TimHunter

Dale said:
First thing's first - if there's a newbie forum where a question like
this would be more appropriate, somebody please point it out to me.

I'm new to Ruby, and I'm trying to pick it up specifically for Watir
testing. I've installed Ruby from the One Click Installer for Windows
three times now, but I keep running into the same issue, so at this
point I figure it must be operator error. The versions I've used so far
are:

ruby186-25.exe
ruby185-24.exe
ruby185-22.exe

Here's the issue I keep running into:

C:\rubysandbox>irb
irb(main):001:0> 1..10.each { |x| puts x }
NoMethodError: undefined method 'each' for 10:Fixnum
from (irb):1
irb(main):002:0>


Why do I keep getting a NoMethodError when I try to use the each()
method on a number?

#each generally applies to collection of things, so you don't use it on
a single number. I think what you want is

(1..10).each {|x| puts x}

By surrounding the range 1..10 with parentheses you're telling Ruby that
you want the #each method for the range 1..10, not for the single number 10.
 
B

bbxx789_05ss

7stud said:
So, I try to do this instead:

10.times do |i|
...
...
end

I should mention that this code:

10.times do |i|

is not equivalent to:

(1..10).each do |i|

because times() starts counting at 0 and ends at 9.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,999
Messages
2,570,243
Members
46,836
Latest member
login dogas

Latest Threads

Top