How to return value from middle of a block?

Hi:

I am trying to return a value from a middle of a block,
but when I do, it exits the block.

Here is the code:

def _parse
loop { puts yield }
end

def parse
i = 0
_parse {
# This code returns nil, but keeps going.
# prints
# 1
# 2
# nil
# …
#i+=1 == 3 ? rtn = nil : rtn = i
#rtn

``````# This code quits when it see return
# prints
# 1
# 2
i += 1
if i == 3
return nil
end
i
``````

}
end

parse

Is there a syntax for returning a value from the middle of
a block? I know that I can always set a return value and
let execution drop to the bottom of the block, but it is
discomforting for there to be a difference betweeen
an implicit return and an explicit return.

···

– Jim Freeze

It always takes longer than you expect, even when you take

Hi:

``````#i+=1 == 3 ? rtn = nil : rtn = i
``````

should be

···

On Tuesday, 17 December 2002 at 8:52:44 +0900, Jim Freeze wrote:

``````#(i+=1) == 3 ? rtn = nil : rtn = i
``````

– Jim Freeze

If you had any brains, you’d be dangerous.

Jim Freeze jim@freeze.org writes:

Is there a syntax for returning a value from the middle of
a block? I know that I can always set a return value and

Is this what you’re looking for?

def bar
100.times{|i| puts yield i}
end

def foo
if arg < 10
return 10 #explicit return
end
arg #implicit return
end

bar{|i| foo(i)}

YS.

Hi,

···

In message “How to return value from middle of a block?” on 02/12/17, Jim Freeze jim@freeze.org writes:

I am trying to return a value from a middle of a block,
but when I do, it exits the block.

break

if you’re using 1.7

``````						matz.
``````

Hmm, I tried that, but it didn’t work.

-> ./ruby173/bin/ruby -v
ruby 1.7.3 (2002-12-04) [i386-freebsd4.6]
-> cat p1.rb
def _parse
loop { puts yield }
end

def parse
i = 0
_parse {
#(i+=1) == 3 ? rtn = nil : rtn = i
#rtn
if (i+=1) == 3
break nil
end
i
}
end

parse
-> ./ruby173/bin/ruby p1.rb
1
2

···

On Tuesday, 17 December 2002 at 9:07:13 +0900, Yukihiro Matsumoto wrote:

Hi,

I am trying to return a value from a middle of a block,
but when I do, it exits the block.

break

if you’re using 1.7

– Jim Freeze

“If I had only known, I would have been a locksmith.”
– Albert Einstein

Hi,

···

At Tue, 17 Dec 2002 11:59:01 +0900, Jim Freeze wrote:

I am trying to return a value from a middle of a block,
but when I do, it exits the block.

break

if you’re using 1.7

Hmm, I tried that, but it didn’t work.

-> ./ruby173/bin/ruby -v
ruby 1.7.3 (2002-12-04) [i386-freebsd4.6]
-> cat p1.rb
def _parse
loop { puts yield }
end

def parse
i = 0
_parse {
#(i+=1) == 3 ? rtn = nil : rtn = i
#rtn
if (i+=1) == 3
break nil
end
i
}
end

`break' exits closest *lexical* block, try with`next’.