On Fri, 13 Aug 2004 11:36:05 -0700, Larry Wall <[EMAIL PROTECTED]> wrote: > Yes, that's precisely why I'm trying to generalize Ruby's single > "magic" block into one or more ordinary parameters.
Excellent. :) > Two anonymous adverbs? Hmm. While I can think of ways to force it to > work, I'm inclined to disallow it simply because it'd make another > arbitrary rule we'd have to explain. And there's quite a bit to explain already. > You know, at some point you just break down and write them positionally: > > @array.each( { $^odd.bar() }, { $^even.baz() }); Speaking of which, let's talk a little bit about how I'd write these methods. After looking at Apocalypse, Exegesis, and Synopsis 6 again, I have a few more questions. There are two different ways used to declare a subroutine or method: sub foo (&block) { &block('foo'); } and sub foo (Code $block) { $block('foo'); } Which is right? both? The second seems more extensible. And that leads me to another question: can a slurpy array pick up a block? sub foo ([EMAIL PROTECTED]) { say ref @args[0]; # @args[0].type? } foo { $^a =~ /bar/ }; # does this print "Block\n"? It'd be nice to be able to declare my each method like so: class Array { method each($self: [EMAIL PROTECTED]) { my $i = 0; my @results; for @$self -> $elem { my $block = @blocks[ $i++ % [EMAIL PROTECTED] ]; @results.push( $block($elem) ); } return @results; } } But that still doesn't let me call that like I'd want; my @r = @array.each :{ $^first * 2 } :{ $^second * 9 } :{ $^third * 42 }; The other thing I'm wondering is how to apply adverbs to the results of a function, if that's even possible. I believe this is valid: my $odd = 1... :by(2) # an infinite list of odd numbers But this? sub odd_numbers([EMAIL PROTECTED] of Pair) { return 1...; } my $odd = odd_numbers :by(2); Does that pass C<by => 2> as a Pair to the function? Or does it apply the adverb to the result? Maybe I need to do this? my $odd = (odd_numbers) :by(2); My head is swimming at this point, so I'd better give it a rest. matt > On the other hand, the parser will have to deal with multi-block > structures all the time, so perhaps something could be modelled on > how we eventually handle if/elsif/else, presuming we actually > declare those as macros, and not strictly as grammar rules. > > Larry