Re: [RFC] Partial Function Application, take 2

From: 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

« previous php.internals (#114821) next »