Re: [RFC][Discuss] Arrow Functions

From: Date: Tue, 30 May 2017 03:45:07 +0000
Subject: Re: [RFC][Discuss] Arrow Functions
References: 1 2 3 4 5 6 7 8 9 10  Groups: php.internals 
Request: Send a blank email to internals+get-99251@lists.php.net to get a copy of this message
> As a C++ developer, I have no inherent problems with this **in > theory**, but I agree with your statement that it's a bit symbolic > soupish. I also suspect that we'll run into grammar ambiguities. > Imagine: [ []($x) => $x ]. This is current legal syntax (at the > point of compilation) because it *could* be interpreted as an array > with a single element (value $x) who's key is the result of calling a > function defined by an empty array passing a single arg ($x). It's > invalid at runtime (See: https://3v4l.org/IcK3B ), but that > means > special casing our way around the ambiguities. I already mentioned the changed behavior. What you've indicated here is not a special case of that same behavior since []($x) would be prefix to an arrow function which binds the arrow to the closure and not the array. > Further, if we're going to follow the C++ model, we'd be well suited > to allow explicit per-var by-val/by-ref syntax, e.g.: > > [$foo, $bar]() => $foo * $bar > > Again, this is legal syntax to the parser, but now it's even > potentially current legal syntax to the runtime (assuming > is_callable([$foo, $bar]). You would do: [=, $foo, $bar]() => $foo * $bar if you really wanted to bind everything explicitly. I haven't written a full description in my previous thread but it's all doable except I'd want to verify the grammar disambiguation with an empty [] specifically.

« previous php.internals (#99251) next »