Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

86 lines (72 sloc) 1.671 kb
class Fancy {
class BreakIteration : StdError {
"""
Raised to break the current iteration.
It is rescued by Block#loop.
Example:
10 times: |i| {
i println
if: (i == 3) then: {
Fancy BreakIteration new raise!
}
}
\"Done!\" println
Produces:
0
1
2
3
Done!
"""
read_slots: ['result]
def initialize: @result
}
class NextIteration : StdError {
"""
Raised to continue with next iteration (and stopping the current one).
It is rescued by Block#loop.
"""
read_slots: ['result]
def initialize: @result
}
class StopIteration : StdError {
"""
Raised to stop the iteration, in particular by Enumerator#next.
It is rescued by Block#loop.
Example:
{
'Hello println
Fancy StopIteration new raise!
'World println
} loop
'Done! println
Produces:
Hello
Done!
"""
def initialize { @result = nil }
def initialize: @result
def result {
"""
Returns the return value of the iterator.
o = Object new
def o each: block {
block call: [1]
block call: [2]
block call: [3]
100
}
e = o to_enum
e next p #=> 1
e next p #=> 2
e next p #=> 3
try {
e next
} catch Fancy StopIteration => ex {
ex result p #=> 100
}
"""
@result
}
}
}
Jump to Line
Something went wrong with that request. Please try again.