Den 2019-04-09 kl. 17:23, skrev Björn Larsson:
Den 2019-04-09 kl. 12:19, skrev Nikita Popov:
On Tue, Apr 9, 2019 at 8:56 AM Björn Larsson <bjorn.x.lars...@telia.com>
wrote:

Den 2019-04-08 kl. 16:06, skrev Nikita Popov:

On Wed, Mar 13, 2019 at 4:56 PM Nikita Popov <nikita....@gmail.com>
wrote:
Hi internals,

Motivated by the recent list comprehensions RFC, I think it's time we
took
another look at short closures:

https://wiki.php.net/rfc/arrow_functions_v2

This is based on a previous (withdrawn) proposal by Levi & Bob. It uses
the syntax

      fn($x) => $x * $multiplier

and implicit by-value variable binding. This example is roughly
equivalent
to:

      function($x) use($multiplier) { return $x * $multiplier; }

The RFC contains a detailed discussion of syntax choices and binding
modes.
Regards,
Nikita

Heads up: I plan to start voting on this RFC tomorrow if nothing new
comes
up.

Most of the discussion was (as expected) about the choice of syntax.
Ultimately I think there are many reasonable choices we can make here,
but
we should stick to a specific proposal for the purposes of the RFC vote.
None of the given arguments convinced me that some other syntax is
*strictly* better than the proposed fn($x, $y) => $x*$y -- it's more a
matter of some choices being slightly better in one case and slightly
worse
in another. My personal runner-up would be \($x, $y) => $x*$y, but I
suspect that there are some people who are more strongly biased against
"sigil salad" than I am...

Nikita
Hi,

I recall that the perception of the ==> syntax in the Hacklang user
community was quite positive. Of course it was implementation
difficulties. Are they still to cumbersome in PHP?

Personally I prefer that one being more readable or the \ one.
Anyway, glad to see that short closures finally is on the road
again!

The ==> syntax is the other one I implemented (
https://github.com/php/php-src/pull/3945). The implementation is based on
lexer lookahead, which is ugly but still manageable. I haven't seen much
support for this variant in this discussion though. And of course, if
there's no strong preference for ==>, I'd rather go with the variant that
is easier for us (and all 3rd party tooling) to support from a technical
perspective.

Nikita
Maybe part of the reason it didn't attract to much support is that people
are quite aware and respect the implementation difficulties. I recall a
comment in this thread pointing in that direction.

Well it's probably me being a long-time PHP user and now trying to learn
RUST that finds the fn() syntax a bit confusing ;-) From that perspective I
would prefer the \$x => $x **2 vs fn($x) => $x **2 or the ==> one.

r//Björn L


Hi again,

Just read the RFC a bit closer and saw that \$x is'nt possible, pity. Taking
an example from chregu gist with arrow function inside a function call:
- $waithandles = $this->urls->map(fn($url) => $this->fetcher->fetch($url));
- $waithandles = $this->urls->map(\($url) => $this->fetcher->fetch($url));
- $waithandles = $this->urls->map($url ==> $this->fetcher->fetch($url));

I would say that when lambda functions occurs in function calls I find the
\ or ==> syntax more readable.

Over & out //Björn L

Reply via email to