Eva
(Eva)
24 December 2009 02:36
1
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.
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
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
marnen@marnen.org
--
Posted via http://www.ruby-forum.com/\ .
Eva
(Eva)
24 December 2009 03:29
4
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
···
On Thu, 2009-12-24 at 11:47 +0900, Steve Klabnik wrote:
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
Eva wrote:
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
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
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
···
On Thu, 2009-12-24 at 11:47 +0900, Steve Klabnik wrote:
Eva
(Eva)
24 December 2009 05:54
6
Thanks all!
Merry Christmas Ruby world.
···
--
Kind Regards,
Eva.