Newbie question

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?

···

--
Posted via http://www.ruby-forum.com/.

Dale Smith wrote:

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.

···

--
       vjoel : Joel VanderWerf : path berkeley edu : 510 665 3407

Dale Smith wrote:

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

···

--
Posted via http://www.ruby-forum.com/\.

Dale Smith wrote:

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.

···

--
RMagick OS X Installer [http://rubyforge.org/projects/rmagick/\]
RMagick Hints & Tips [http://rubyforge.org/forum/forum.php?forum_id=1618\]
RMagick Installation FAQ [http://rmagick.rubyforge.org/install-faq.html\]

Because numbers (Fixnums) do not implement the each method as numbers are
not collections - ranges do, though. To call the method on the range instead
of the last Fixnum that forms the range, enclose it in parantheses:

$ 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> (1..10).each {|x| puts x}
1
2
3
4
5
6
7
8
9
10
=> 1..10

HTH,

Felix

···

-----Original Message-----
From: list-bounce@example.com
[mailto:list-bounce@example.com] On Behalf Of Dale Smith
Sent: Thursday, November 01, 2007 2:29 PM
To: ruby-talk ML
Subject: Newbie question

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?
--
Posted via http://www.ruby-forum.com/\.

7stud -- wrote:

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.

···

--
Posted via http://www.ruby-forum.com/\.