Re: [RFC] Partial Function Application, take 2
| From: | Guilliam Xavier | Date: | Thu, 10 Jun 2021 17:32:21 +0000 |
| Subject: | Re: [RFC] Partial Function Application, take 2 | ||
| References: | 1 2 3 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-114821@lists.php.net to get a copy of this message | ||
On Thu, Jun 10, 2021 at 4:34 PM Larry Garfield <larry@garfieldtech.com>
wrote:
> On Thu, Jun 10, 2021, at 3:17 AM, Guilliam Xavier wrote:
> > On Wed, Jun 2, 2021 at 7:47 PM Larry Garfield <larry@garfieldtech.com>
> > wrote:
> >
> > > https://wiki.php.net/rfc/partial_function_application
> >
> > for
$null === null, is $c =
> > $null->bar(?); / `$c =
> > $null::baz(?);` an immediate error, or only later when calling
> $c($arg)?
>
> That dies with "call to member function on null" when trying to create the
> partial:
>
> https://3v4l.org/E6MgK/rfc#focus=rfc.partials
>
That makes sense (eager evaluation of non-placeholder "arguments",
including the called-on object).
> > does it
> > support nullsafe calls, e.g. $foo?->bar(?)? and if yes,
> > what is the
> > signature of the Closure when $foo === null?
>
> I just checked, and it... sort of supports nullsafe. Rather, if you try
> to partial a method on a null object, you get null back for your closure.
> Then when you try to call it, you get a "cannot invoke null" error.
> Which... I think makes sense.
>
> cf: https://3v4l.org/4XeB3/rfc#focus=rfc.partials
Well I find that unexpected :/
> As a cute side effect, Joe pointed out you could do this:
>
> https://3v4l.org/ERRdY/rfc#focus=rfc.partials
So there's a "workaround", although I wouldn't call it precisely
"cute"...
> I wouldn't really call that a feature, but more of a side effect of the
> implementation. Please don't count on that behavior.
>
I'd rather not indeed ;) Since $null?->whatever(1, 'a') currently
always
returns null without error, shouldn't $null?->whatever(?, 'a') return
a
closure (with a signature built from the placeholders only) that will
return null when called (i.e. equivalent to fn (mixed $arg1) => null
here)?
Thanks,
--
Guilliam Xavier