return in blocks

L

Lyndon Samson

Whats the official word on using return to return a value in a block,
rather than just the value of the last expression?

Using ruby 1.8.2 (2004-12-25) [i386-mswin32] I see strange behaviour (
silent crash ) when explicitly using 'return' to return from a block,
yet otherwise the code runs fine.

running under ntsd

eax=3D74fd5054 ebx=3D7ffdf000 ecx=3D0241cdac edx=3D00000000 esi=3D77f8dd80 =
edi=3D00000000
eip=3D77f8dd8b esp=3D0240fe2c ebp=3D0240fef4 iopl=3D0 nv up ei pl z=
r na po nc
cs=3D001b ss=3D0023 ds=3D0023 es=3D0023 fs=3D0038 gs=3D0000 =
efl=3D00000246
ntdll!NtTerminateProcess+b:
77f8dd8b c20800 ret 0x8

Which I can't interpret as anything in particular.
 
Y

Yukihiro Matsumoto

Hi,

In message "Re: return in blocks"

|Whats the official word on using return to return a value in a block,
|rather than just the value of the last expression?

Usually use "break <value>" to pass a value from a block.

|Using ruby 1.8.2 (2004-12-25) [i386-mswin32] I see strange behaviour (
|silent crash ) when explicitly using 'return' to return from a block,
|yet otherwise the code runs fine.

Show us a concrete code to reproduce your crash, please, preferably
using more recent version, at least 1.8.3.

matz.
 
L

Lionel Thiry

Lyndon Samson a écrit :
Whats the official word on using return to return a value in a block,
rather than just the value of the last expression?

return in a block doesn't just return the block, it returns the method
where the block has been created.

Exemple:

def my_method
test = ["one", "two", "three"]
test.each do |e|
if e == "three"
return "my_method returned"
end
puts e
end
puts "will it ever goes here?"
end

puts my_method

output:

one
two
my_method_returned
 
L

Lyndon Samson

------=_Part_30258_5705931.1132546603178
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable
Content-Disposition: inline

Lyndon Samson a =E9crit :

return in a block doesn't just return the block, it returns the method
where the block has been created.

Hence my silence, I'm sure when I check this will turn out to be what
happened.

Apologies for the noise :)

------=_Part_30258_5705931.1132546603178--
 

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

Staff online

Members online

Forum statistics

Threads
473,755
Messages
2,569,534
Members
45,008
Latest member
Rahul737

Latest Threads

Top