--- Damian Conway <[EMAIL PROTECTED]> wrote: > Austin Hastings asked: > > That is, can I say > > > > for (@squares) > > { > > ... > > if $special.instructions eq 'Advance three spaces' > > { > > $_.next.next.next; > > } > > ... > > } > > > > or some other suchlike thing that will enable me to consistently > > perform iterator-like things within a loop, regardless of origin? > > If, by C<$_.next.next.next;> you mean "skip the next three elements > of @squares", then no. $_ isn't an alias to the implicit iterator > over @squares; it's an alias for the element of @squares currently > being iterated. > > You want (in my formulation): > > my $dance = Iterator.new(@squares); > for $dance { > ... > if $special.instructions eq 'Advance three spaces' { > $dance.next.next.next; > } > ... > }
How'zat, again? What is the means for extracting the actual VALUE of $dance? And why is that different for $_-as-iterator? IOW: my Iterator $dance = ...; for <$dance> { print $_; # should this print the current dance, -> $_ by default? print $dance; # Should the above be ".value()" # or ".next()" # or ".toString()" ? print <$dance>; # Obviously "get next value and advance" a la p5 } Also, in your formulation: > my $dance = Iterator.new(@squares); > for $dance { What happens when iterators require magic state info? It seems more appropriate to define a CLASS.iterator method, which overloads a simplistic default. ("fail" in scalar cases, iterative for Array and Hash) > > (Oh please! Let there be one, and for love of humanity, let it be > > called "bork". Pleasepleaseplease!!! It's a shorthand form of "bind > or > > kontinue", really it is. :-) :-) :-)) > > "Brain on raw krack" more like it ;-) Whatever! As long as I get to say: for my <@Swedish> -> $chef { $chef.bork.bork.bork; } Perlmuppets, anyone? > > So in general, diamonded-function-call implies > coroutine/continuation? > > That's the problem. I can't see how that works syntactically. I was thinking in terms of "reading", not "parsing" -- that is, "when a coder reads diamonded-function-call, the reflex will be 'this is a continuation'" -- valuable clues. > > To disagree, vile Aussie! To be looking at perl5's adornmentless > > diamond: > > > > If I say: while (<>) {print;} I'm asking for file-scan behavior. > > Yes. Special case. But a special case of WHAT? > > If I say: for (<@ARGV>) { print; } I'm asking for trouble? > > <grin> Under my proposal, you're saying: > > * Grab next element of @ARGV > * Iterate that element. That's the problem. Why would the second point "* Iterate that element" happen? We've already GOT a flattener. If I want recursive iteration I can say: for (<*@ARGV>) { print; } or maybe for (*<@ARGV>) { print; } I can't be sure. > *Unless* the elements of @ARGV in Perl 6 are actually special > Iterator-ish, > filehandle-ish objects that happen to also stringify to the > command-line > strings. Hmmmmm. I thought of that one first, but discarded it. > > Proposal: > > Seemed very complex to me. It's because I discarded the "@ARGV is magic that stringifies" option. In other words, let @ARGV be normal, first and foremost. Then apply magic to it. That way, I can argue for being able to apply the SAME magic to something else, rather than trying to fight with having to reimplement the @ARGV magic class. my @file_names = ( list of strings ); my FileIterator @argv_alike := @file_names; while (<@argv_alike>) { ... } Now the question is, how do I get it into $_/@_/whatever_, so that I can use <> instead of <@argv_alike>? (I avoid simply slapping it into @_ because I vaguely recall something about the inevitable demise of @_-as-arglist etc. But that was before the weekend, when there were more brain cells.) > <GROAN> Warning: File iterator used in void context. Possible loss of data. =Austin __________________________________________________ Do you Yahoo!? Yahoo! Web Hosting - Let the expert host your site http://webhosting.yahoo.com