Le Thu, 17 Jun 2021 08:37:23 -0500,
"Larry Garfield" <[email protected]> a écrit :
> On Thu, Jun 17, 2021, at 2:54 AM, Côme Chilliet wrote:
> > > $c = stuff(...);
> > > $c = fn(int $i, string $s, float $f, Point $p, int $m = 0)
> > > => stuff($i, $s, $f, $p, $m);
> >
> > > $c = stuff(1, 'hi', 3.4, $point, 5, ...);
> > > $c = fn(...$args) => stuff(1, 'hi', 3.4, $point, 5, ...$args);
> >
> > Why is there an additional variadic parameter in this one?
>
> ... means "zero or more". In this case, it means zero, that is, it creates a
> closure that requires no arguments and will call the original function with
> all of the provided values later. This is the "deferred function" use case
> mentioned further down.
I still do not understand why there is an added variadic parameter when
using ... in stuff(1, 'hi', 3.4, $point, 5, ...); but not when using it in
stuff(...);
What happens when we use stuff(1, 'hi', 3.4, $point, ...); ?
> > Also, in the second set of examples:
> > > function things(int $i, float $f, Point ...$points) { ... }
> >
> > > // Ex 13
> > > $c = things(...);
> > > $c = fn(int $i, float $f, ...$args) => things(...[$i, $f, ...$args]);
> >
> > > // Ex 14
> > > $c = things(1, 3.14, ...);
> > > $c = fn(...$args) => things(...[1, 3.14, ...$args]);
> >
> > What happens to the typing of the variadic parameter here? Why is it
> > removed?
> >
> > It would feel natural that the ... means "copy the rest of the parameters
> > from signature". Here it seems it sometimes mean that, and sometimes mean
> > "accept an additional variadic parameter and pass it along".
>
> Internally placeholders do mean the former. A trailing variadic, though, can
> accept extra arguments of potentially not pre-defined types, so it sort of
> straddles the line. Variadics make things weird. :-) (Dating from PHP
> 5.6.) In the majority case, though, thinking of them as "copy the rest of
> the arguments" is accurate.
I do not understand why Points ...$points becomes untyped ...$args when using
things(...), while when using stuff(...) earlier no typing was lost.
Côme
--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: https://www.php.net/unsub.php