On Mon, May 17, 2021 at 5:47 PM Alexandru Pătrănescu <dreal...@gmail.com>
wrote:

>
> On Mon, May 17, 2021 at 6:36 PM Guilliam Xavier <guilliam.xav...@gmail.com>
> wrote:
>
>> On Mon, May 17, 2021 at 5:01 PM Levi Morrison <
>> levi.morri...@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

Reply via email to