value returned from code block

S

Spitfire

I've read that in Ruby the value returned from a code block is the
value of the last expression executed. Is it so? If Yes, I don't
understand the value returned by the following code block!

def clistIter
clist = [1, 2, 3]
clist.each do |elem|
yield(elem)
end
end

clistIter { |e| print e }

## output in irb:
## 123 => [1, 2, 3]
##
## returned value:
## => [1, 2, 3]

Can someone explain how come an array is returned as result?
 
R

Robert Klemme

I've read that in Ruby the value returned from a code block is the
value of the last expression executed. Is it so? If Yes, I don't
understand the value returned by the following code block!

def clistIter
clist = [1, 2, 3]
clist.each do |elem|
yield(elem)
end
end

clistIter { |e| print e }

## output in irb:
## 123 => [1, 2, 3]
##
## returned value:
## => [1, 2, 3]

Can someone explain how come an array is returned as result?

Because #each ignores all return values from the block (it is invoked
once per element visited) and chooses to return self. This is how it
could look like internally (it's coded in C of course):
class Array
def demo_each
for i in 0...length
yield self
end
self
end
end => nil
[1,2,3].demo_each {|e| p e; 666}

1
2
3
=> [1, 2, 3]

Kind regards

robert
 
R

Rimantas Liubertas

I've read that in Ruby the value returned from a code block is the
value of the last expression executed. Is it so? If Yes, I don't
understand the value returned by the following code block!
## returned value:
## => [1, 2, 3]

Can someone explain how come an array is returned as result?

In ruby 1.8 assignment always returns rvalue.


Regards,
Rimantas
 
R

Rimantas Liubertas

Can someone explain how come an array is returned as result?
In ruby 1.8 assignment always returns rvalue.

I should have read more carefully. What I said is true, but has
nothing to do with
your case, sorry for the noise.

Regards,
Rimantas
 

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,769
Messages
2,569,580
Members
45,055
Latest member
SlimSparkKetoACVReview

Latest Threads

Top