On Wed, Nov 11, 2020 at 12:37 PM David Rodrigues <david.pro...@gmail.com>
wrote:

> My suggestion is to reuse the keyword `as` to set a variable that will
> represent its own closure. It is more flexible once that we could choose
> any name and reuse in nested closures. It is pretty similar to how SQL
> works too.
>
> function fn1() as $lambda1 {
>     return function() as $lambda2 use ($lambda1) {
>         return [ gettype($lambda1), gettype($lambda2) ];
>     };
> }
>
>
My initial reaction to this is:  Technically doable (easy even), but looks
a bit... ugly? weird? surprising?

I think my main objection to it is how much is now stacked after the
parameter list:

function($args...) : returnType as $local use ($captures...) {
  ...
};

That's a lot of... stuff (granted, we have most of it already) and how it
looks when stacked together gets funky.

Is it `returnType as $thing` ?  That doesn't read well, but I don't see us
making return type movable.  as/use should be placable in either order, but
maybe we give them required order anyway?

TLDR; Long winded way to say I'm not inherently against this, and I like
the idea of a lambda being able to recurse (not that I can ever recall
having use for it, but maybe I fell back on named functions for that), I
just think it's getting a bit wordy.

-Sara

Reply via email to