On Thu Jan 30 07:15:52 2014, pmichaud wrote:
> On Wed, Jan 29, 2014 at 06:14:38PM -0800, Mark E. Shoulson wrote:
> > Consider:
> >
> > multi sub f1(Any $x) { "Any $x" }
> > multi sub f2(Any $x) { f1($x) }
> > multi sub f1(Rat $x) { "Rat $x" }
> >
> > say f2("a");
> > say f2(1.9);
> > say f1(1.9);
>
> The way the REPL works is that each line of entered input
> ends up in its own (nested) lexical scope. We've yet to
> find a good solution around this -- in order to complete
> compilation and execution of a line, we kinda have to make
> the current lexical scope concrete. This is at least
> implied in several sections of the synopses, where the lexical
> symbol table is considered static after compilation completes
> ("CHECK" time, I believe).
>
> Thus when the lines above are entered one at a time,
> the REPL treats it as:
>
> {
> multi sub f1(Any $x) { "Any $x" }
>
> {
> multi sub f2(Any $x) { f1($x) }
>
> {
> multi sub f1(Rat $x) { "Rat $x" }
>
> {
> say f2("a");
>
> {
> say f2(1.9);
>
> {
> say f1(1.9);
> }
> }
> }
> }
> }
> }
>
> So, when f2() is executed, the f1(Rat) multi isn't in scope and
> never gets called.
>
> To think of it another way -- each line of input to the REPL
> is treated like a nested EVAL, thus resulting in its own lexical
> scope.
>
> At the moment I'm inclined to reject this ticket as "not a bug",
> since Perl 6.0 design seems to constrain anything REPL-like to
> work this way. But perhaps someone sees a way to have lexical
> scopes that can be more dynamic/interactive, so I'll give time
> for other opinions before closing this.
>
> Pm
Rejecting ticket.
--
Will "Coke" Coleda