[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Newbie question

dalesmithtx

11/1/2007 9:29:00 PM

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-....

4 Answers

Joel VanderWerf

11/1/2007 9:36:00 PM

0

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

7stud --

11/1/2007 9:40:00 PM

0

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-....

Tim Hunter

11/1/2007 9:41:00 PM

0

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/project...]
RMagick Hints & Tips [http://rubyforge.org/forum/forum.php?for...]
RMagick Installation FAQ [http://rmagick.rubyforge.org/instal...]

7stud --

11/1/2007 9:42:00 PM

0

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-....