[#1378] differences between Module and Class ? — Mathieu Bouchard <matju@...>

25 messages 2003/08/11
[#1387] Re: differences between Module and Class ? — matz@... (Yukihiro Matsumoto) 2003/08/12

Hi,

[#1442] Re: differences between Module and Class ? — Mathieu Bouchard <matju@...> 2003/08/21

[#1406] _id2ref bug? — Ryan Pavlik <rpav@...>

While debugging some caching code, I've come across a segfault related

22 messages 2003/08/14
[#1407] Re: _id2ref bug? — matz@... (Yukihiro Matsumoto) 2003/08/14

Hi,

[#1413] Re: _id2ref bug? (REPRODUCED, short) — Ryan Pavlik <rpav@...> 2003/08/14

On Fri, 15 Aug 2003 01:57:18 +0900

Re: proc/block with return

From: george.marrows@...
Date: 2003-08-13 10:15:50 UTC
List: ruby-core #1397
> Actually I've found one difference which is especially troublesome:
> 
> irb(main):001:0> def f(&b) b.call; end; def g; f{return 42}+1; end; g
> => 43
> irb(main):002:0> def f; yield; end; def g; f{return 42}+1; end; g
> => 42

Here's another return/proc/block oddity, though it may just be a side effect
of the above. 

If you run the code below on 1.8.0 you get:
trace: [1, 4, 6, 8, 2]

but if you make the suggested '&p' -> 'p' changes, you get:
trace: [1, 4, 6, 8, 2, 5]

So the behaviour of return depends on the history of how the block got to
the yielding method, which is odd.

-- George


def return1(a)	
	a << 1
	p = proc { a << 2; return; a << 3 }
	a << 4
	return2(a, &p)  # change to p
	a << 5
end

def return2(a, &p)     # change to p
	a << 6
	return3(a, &p)
	a << 7
end

def return3(a)
	a << 8
	yield
	a << 9
end

a = []
return1(a)
puts "trace: #{a.inspect}"


In This Thread

Prev Next