On Mon, May 17, 2021 at 5:47 PM Alexandru Pătrănescu <drealecs@gmail.com>
wrote:
>
> On Mon, May 17, 2021 at 6:36 PM Guilliam Xavier <guilliam.xavier@gmail.com>
> wrote:
>
>> On Mon, May 17, 2021 at 5:01 PM Levi Morrison <
>> levi.morrison@datadoghq.com>
>> wrote:
>>
>> > Joe Watkins has successfully worked out some bugs that also enable
>> > more powerful behavior. Thanks to Nikita and any others who worked
>> > with Joe on fixing these issues and reviewing the PR.
>> >
>> > The short of it is that re-ordering parameters when using named
>> > placeholders is now technically possible. We will send an update when
>> > the RFC and implementation are ready for re-review.
>> >
>>
>> That's great news!
>>
>> By the way, I forgot to add that another syntax might also be clearer when
>> binding a value to a named parameter, e.g.:
>>
>> ```
>> function f($a, $b, $c, $d, $e) {/*...*/}
>>
>> /* We want to bind value 4 to param "d" */
>>
>> // with current syntax:
>> $p = f(?, d: 4); /* or f(?, ?, ?, 4) */
>>
>> // with another hypothetical syntax:
>> $p = *f(d: 4);
>> ```
>>
>> Anyway, looking forward to your update =)
>>
>> Thanks,
>>
>> --
>> Guilliam Xavier
>>
>
> Hey Guilliam,
>
> adding a special character like * or ? before the function name is
> not going to work.
> It might look good for *f() but it has the same issues as casting.
>
> You should be able to have with the current version a code like
> $actionGenerator->getDriveAction()('home', ?)
> You can't really put the * or ? before the function name here.
>
> Maybe having it just before the parenthesis would work.
>
> Regards,
> Alex
>
>
>
>
Hey Alex,
I was thinking of a (special) new unary [prefix] operator (e.g. * which
currently only exists as binary) with a higher precedence than () (if
that makes sense), which indeed means that e.g. *f(1)(2) would be like
current f(1, ?)(2), and f(1)(2, ?) would require wrapping as
*(f(1))(2).
A lower precedence would require wrapping as (*f)(1) for the simple case
(i.e. most of the time), which moreover would probably be problematic if
you have both a function f and a const f.
Just before the affected ( might also work indeed, but with another
symbol, as f(1)*(2) [and f*(1)] already means f(1) * 2 [and
`f *
1]. Maybe !, @ or ~` would be unambiguous at that position?
(For both, there's also the possibility of choosing not a symbol but a
keyword...)
Alternatively, f(..., d: 4) or probably rather f(d: 4, ...) would
arguably still be clearer than the current f(?, d: 4), but still wouldn't
really solve the "weirdness" of noParam(...) and `threeParams(1, 2, 3,
...)`.
Sorry, I didn't intend to diverge so much. The gist is that I (too) don't
like the current "duality" of ?.
PS: when I write "current" I really mean "in the current state of the RFC".
Regards,
--
Guilliam Xavier