Hello,

for now what I see is a bit of everything:
- adding a contextual keyword/alias to function
- enforce by reference
- a lack of coherence

too mockups (I like the arrow idea but won't ever replace `use`
functionalities)

"keeping the unnecessary  arrow"

class bar
{
   public fn foo(int $x, int $y)
   {
      return fn($x) [&$y] => {
         $x * $y;
      };
   }
}

"aliasing function keyword to fn; aliasing use keyword  with brackets
syntax"

class bar
{
   public fn foo(int $x, int $y)
   {
      return fn($x) [&$y] { $x * $y; }
   }
}


On Tue, Apr 9, 2019 at 3:29 PM Kosit Supanyo <webdevxp....@gmail.com> wrote:

> Hi internals,
>
> This is my first write to this list but I've been followed
> your discussions quite a while ago. For a brief introduction,
> my name is Kosit, I'm a programmer from Thailand and I've been using
> PHP since version 3 (for a short period before moving to PHP4).
>
> I'm a fan of `fn` syntax and OK to go with it but I would like to
> propose some extended syntax & behavior about binding.
>
> What if we can omit the `use` keyword at all and use only
> second parentheses for variable & reference binding
> and make the presence of second parentheses turn off implicit variable
> binding.
>
>     $a = 0;
>     $f1 = fn(): int => $a;
>     $b = 0;
>     $f2 = fn(): int () => $b;
>
> equivalent to
>
>     $a = 0;
>     $f1 = function () use ($a) { return $a; };
>     $b = 0;
>     $f2 = function () { return $b; };
>
> And what if we can omit parentheses at all if fn has no parameters.
>
>     $f = fn => $this->doSomethingWithAB($a, $b);
>     $multiStmtBody = fn {
>         // ...
>     };
>
> When people want to import references (and addtional variables)
> they have to do it explicitly like before but without `use` keyword.
>
>     $f = fn($y): array (&$arr, $x) => $this->doSomethingWithArrAndXY($arr,
> $x, $y);
>
> equivalent to
>
>     $f = function ($y): array use (&$arr, $x) {
>         return $this->doSomethingWithArrAndXY($arr, $x, $y);
>     };
>
> Second parens without `use` keyword may be ugly but can be seen as
> an abbreviation of old closure syntax.
>
> This can eliminate possible problems of reference binding (switching)
> syntax
> described in the RFC that may cause undesired behavior and performance
> problem
> because `use (&)` will make all variables by-reference bound.
>
> Summary:
>
> 1. No `use` keyword for binding.
> 2. The presence of second parentheses will turn off implicit binding.
> 3. Can omit parentheses if fn has no parameters.
>
> I apologize in advance for my bad English
> but I hope my idea can be taken into consideration
> or at least can be transformed into another useful idea.
>
> Regards,
> Kosit
>
> On Mon, Apr 8, 2019 at 9:07 PM Nikita Popov <nikita....@gmail.com> wrote:
> >
> > 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
>

Reply via email to