[OT] Should exist / does exist?

Andy Armstrong andy at hexten.net
Thu Dec 7 10:20:31 GMT 2006

On 7 Dec 2006, at 09:34, Adriano Ferreira wrote:
> That made me curious: what is the Ruby expression to do that? IMO it
> looks like Ruby must have the same unsolved issue. Or am I wrong?

No, you're precisely right - Ruby seems to have the same problem. I  
had a further play last night. As I mentioned I'm leaning towards a  
mixin module that adds redo|next|last to a module like this:

package MyIter
use BlockLoopMagicThing;

sub forThings {
    my $self = shift;
    my $cb   = shift;

    eval {
       for my $obj (@{$self->{objs}}) { # or whatever
          $self->yield_to($cb, $obj);
    if ($self->is_last($@)) {
        # $iter->last called
    } else {
        die $@;

... later ...

$iter->forThings(sub {
     my $thing = shift;
     if ($thing->nasty) {
     if ($thing->can_be_fixed) {
     if ($thing->is_the_one_we_want) {

The mixin would provide redo, next, last, yield_to, is_last and maybe  
others. redo and next can be handled by yield_to - next is just an  
early exit from a single iteration and redo just calls the block  
again with the same parameters. Often the only thing that needs to be  
communicated back to the iterator is last - because how you get out  
of the iterator depends on its implementation.

Andy Armstrong, hexten.net

More information about the london.pm mailing list