Forum: Ruby return in blocks

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
lyndon.samson (Guest)
on 2005-11-20 12:31
(Received via mailing list)
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=74fd5054 ebx=7ffdf000 ecx=0241cdac edx=00000000 esi=77f8dd80
edi=00000000
eip=77f8dd8b esp=0240fe2c ebp=0240fef4 iopl=0         nv up ei pl zr na
po nc
cs=001b  ss=0023  ds=0023  es=0023  fs=0038  gs=0000
efl=00000246
ntdll!NtTerminateProcess+b:
77f8dd8b c20800           ret     0x8

Which I can't interpret as anything in particular.
matz (Guest)
on 2005-11-20 13:07
(Received via mailing list)
Hi,

In message "Re: return in blocks"
    on Sun, 20 Nov 2005 19:29:40 +0900, Lyndon S.
<removed_email_address@domain.invalid> writes:

|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.
lthiryidontwantspams (Guest)
on 2005-11-21 06:06
(Received via mailing list)
Lyndon S. 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


--
Lionel T.

Personal web site: http://users.skynet.be/lthiry/
lyndon.samson (Guest)
on 2005-11-21 06:18
(Received via mailing list)
On 11/21/05, Lionel T. <removed_email_address@domain.invalid> wrote:
>
> Lyndon S. 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.
>
> Hence my silence, I'm sure when I check this will turn out to be what
happened.

Apologies for the noise :-)
This topic is locked and can not be replied to.