I'm not sure if this adds anything, but:
The reason why infix<||> doesn't work as you'd expect, is that operators
like '||' and '&&' operate on expressions, that is to say code, rather than
on values.
The only valid way to extend such operators is to either use macros (which
would receive both sides as arguments) or to create 'thunks' out of both
sides.
Either way, a sub that takes value arguments is incompatible with the
short-circuiting semantics, and I think it should fail at compile time.

Regards,
Bart

2017-01-11 23:42 GMT+01:00 Fernando Oliveira <fernandocor...@gmail.com>:

> But should those 2 forms behave differently?
>
> 20:40 <SmokeMachine> m: multi infix:<||>(42, 42) {"OK"}; say
> infix:<||>(42, 42); say 42 || 42
> 20:40 <camelia> rakudo-moar 8f3476: OUTPUT«OK␤42␤»
>
> Enviado do meu iPhone
>
> > Em 11 de jan de 2017, às 20:20, jn...@jnthn.net via RT <
> perl6-bugs-follo...@perl.org> escreveu:
> >
> >> On Tue, 10 Jan 2017 17:59:05 -0800, c...@zoffix.com wrote:
> >>> On Tue, 10 Jan 2017 16:23:18 -0800, fernandocor...@gmail.com wrote:
> >>> If I write another || operator it will continue to use the original
> >>> version.
> >>>
> >>> https://irclog.perlgeek.de/perl6/2017-01-10#i_13895823
> >>> <https://irclog.perlgeek.de/perl6/2017-01-10#i_13895823>
> >>
> >> To save other readers sifting through the chan log... Even an only sub
> >> doesn't take root:
> >>
> >> <Zoffix> m: sub infix:<||> ($, $) {"hi"}; say 42 || 55
> >> <camelia> rakudo-moar 9a11ea: OUTPUT«42␤»
> >>
> >> This applies to &&, and, or, and I'd guess any shortcurcuiting
> >> operator.
> >
> > These are special compiler forms that receive special code-gen, due to
> their shortcircuiting nature, and so do not result in sub calls. Thus
> there's no sub to override.
> >
>

Reply via email to