# Why this works not right

Hi,

Please take a look at below:

def mytest
return [1…10]
end

x = mytest
x.each do |c| puts c end

this works not as I expected.
I want the output of:
1
2
3
4
5
6
7
8
9
10

But if I change return [1…10] to return 1…10 it will work.
So what’s the difference between 1…10 and [1…10]?
THanks.

Eva wrote:

Hi,

Please take a look at below:

def mytest
return [1…10]
end

x = mytest
x.each do |c| puts c end

this works not as I expected.
I want the output of:
1
2
3
4
5
6
7
8
9
10

But if I change return [1…10] to return 1…10 it will work.
So what’s the difference between 1…10 and [1…10]?

1…10 is a Range. [1…10] is an Array with one element (that happens to
be a Range, but that’s irrelevant). Range#each returns each element in
the range, so you get 1, 2, 3, etc. Array#each likewise returns each
element in the array – but your array only has one element, the Range
object itself!

If you want an Array with the elements 1 to 10, you need something like
(1…10).to_a .

THanks.

## Best,

Marnen Laibow-Koser
http://www.marnen.org
[email protected]

1…10 is a range, while [1…10] is an array with one element, a range
from
1…10. You can think of 1…10 as (1…10) and [1…10] as [(1…10)]

I am 95% sure that this is correct, someone please correct me if I’m
wrong.
irb seems to support this:

def one_to_ten
1…10
end
=> nil
one_to_ten.class
=> Range
[1…10].class
=> Array

On Thu, 2009-12-24 at 11:47 +0900, Steve K. wrote:

one_to_ten.class
=> Range
[1…10].class
=> Array

Thanks for the reply. I’m newbie to Ruby,so have another question, I
want to make a function who returns the result which can be used as:

mytest do |a,b|c| do_something end

How to write this mytest?

Regards,
Eva

Eva wrote:

1…10
=> Array
Regards,
Eva

The do…end is actually creating a block, which is passed into your
method. There are two ways of having functions accept blocks:

#Explicitly
def mytest &block
block.call 1, 2, 3
end

#Implicitly
def mytest
yield 1, 2, 3
end

Either way can be called like

mytest do |a,b,c|
do_something_with a, b, c
end

You will probably want to read up on methods and blocks and how the two
can be used together.

-Justin

Thanks all!
Merry Christmas Ruby world.