Damian Conway writes: > David Wheeler asked: > > > How will while behave? > > C<while> evaluates its first argument in scalar context, so: > > > > while <$fh> {...} # Iterate until $fh.readline returns EOF? > > More or less. Technically: call <$fh.next> and execute the loop > body if that method returns true. Whether it still has the > automatic binding to $_ and the implicit definedness check is yet > to be decided. > > > > while <$iter> {...} # Iterate until $iter.each returns false? > > Yes. >
you mean "Iterate until $iter.next returns false?" what is the difference between the Iterator and lazy array ? am I right that it is just "interface" : lazy array is an iterator object "inside" Array interface : ???? Larry Wall wrote: > Then there's this approach to auto-iteration: > > my @dance := Iterator.new(@squares); > for @dance { but then each is very simple method : class Iterator { method each( $self:) { my @a := $self ; return @a ; } } but then probably we dont need two methods -- next and each . just like in perl5 each can determine the calling context class Iterator { method each( $self:) { when want Scalar { ... } when want Array { my @a := $self ; return @a ; } } } and then <...> could be *really* the sugar for .each ( or .next if it will be called so ) . in these examples > In a scalar context: > > <$fh> # Calls $fh.readline (or maybe that's $fh.next???> > <$iter> # Calls $iter.next > fibs() # Returns iterator object > <fibs()> # Returns iterator object and calls that > # object's C<next> method (see note below) > > > In a list context: > > <$fh> # Calls $fh.each > <$iter> # Calls $iter.each > fibs() # Returns iterator object > <fibs()> # Returns iterator object and calls object's C<each> > <...> *always* force call to .each ( which is context aware ) . but again all that is based on the assumtion that lazy array is just Iterator object in the "cloth" of array ( variable container ) . so this is a question . arcadi