On Mon, Feb 8, 2021, at 12:02 PM, tyson andre wrote:
> Hi Larry Garfield,
> 
> > > Hi internals,
> > > 
> > > Voting has started on https://wiki.php.net/rfc/any_all_on_iterable and 
> > > ends on 2021-02-22.
> > > 
> > > This RFC proposes to add the functions `PHP\iterable\any(iterable 
> > > $input, ?callable $callback = null): bool` and `PHP\iterable\all(...)`
> > > to PHP's standard library's function set, using the namespace preferred 
> > > in the previous straw poll.
> > > 
> > > There is a primary vote on whether to add the functions, and a 
> > > secondary vote on the name to use within the `PHP\iterable` namespace.
> > > 
> > > Thanks,
> > > - Tyson
> > > --
> > > PHP Internals - PHP Runtime Development Mailing List
> > > To unsubscribe, visit: https://www.php.net/unsub.php
> > 
> > 
> > Ak!  I literally just finished reading it and wanted to note a lack of 
> > clarity on one point. :-)
> > 
> > The signature of the callback is never specified explicitly.  The ternary 
> > is a bit confusing.  I assume the signature is 
> > 
> > callable(mixed): bool
> > 
> > But that's not made explicit.  It's also not made explict that omitting the 
> > callable collapses to "is truthy".  That's a sensible thing to do, but it's 
> > not stated explicitly anywhere, just inferred from the code sample.
> > 
> > I'm not sure if it's safe to clarify at this point as the vote just started.
> 
> If there is a callable, it allows `callable(mixed): mixed`,
> and converts the callable's return value to a boolean.
> So omitting the callable is the same as passing in the callable `fn($x) 
> => $x`, which is equivalent to `fn($x) => (bool)$x`.
> This is exactly what the reference implementation would do.
> 
> I definitely should have clarified it instead of assuming that the 
> reference implementation was clear enough.
> 
> I clarified this and gave examples because the RFC started a few hours 
> ago and the implementation didn't change.

Oof.  I'm glad I asked, because I don't like that at all.  If available, the 
callable should be returning bool, not "anything that may be truthy/falsy."  If 
you have an explicit function, it should have an explicit return type.  A 
truthy check is a reasonable default, but not for when you're opting in to 
specifying the logic.

I am in favor of the RFC, but I will have to consider if that changes my vote 
to No.

--Larry Garfield

--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: https://www.php.net/unsub.php

Reply via email to