On Tue, Jan 30, 2018 at 2:24 PM, Levi Morrison <le...@php.net> wrote:

> On Tue, Jan 30, 2018 at 11:13 AM, Larry Garfield <la...@garfieldtech.com>
> wrote:
> > On Monday, January 29, 2018 6:46:10 PM CST Michael Morris wrote:
> >> On Mon, Jan 29, 2018 at 6:16 PM, Larry Garfield <la...@garfieldtech.com
> >
> >>
> >> wrote:
> >> > Really, these functions would be useful only on arrays, period.  To
> allow
> >> > them
> >> > on anything else is just dangerous, and on other iterables there are
> >> > better,
> >> > more robust approaches (as discussed elsewhere in this thread).
> >> >
> >> > As you've demonstrated they're also quite compact and effective to do
> in
> >> > user-
> >> > space, so unless there's a massive performance difference of moving
> them
> >> > to C
> >> > they don't seem all that appropriate to add to the language directly.
> >> >
> >> > --Larry Garfield
> >>
> >> Didn't you personally raise the issue of hard dependencies doing this
> sort
> >> of functionality creates? Implementable in userland or not, this is
> pretty
> >> low level functionality.
> >
> > I don't recall doing so in this thread, but I most likely have on some
> other
> > issue.  It's the sort of comment that I would make. :-)
> >
> > However, that's for a very commonly used function where just inlining it
> is
> > prohibitive.  As you've demonstrated below, this functionality is easily
> a one
> > liner, and it's a one-liner in an assert statement most likely.
> >
> >> Hmm..  If limited to arrays only then array_filter with count is pretty
> >> close to what we want.
> >>
> >> assert(count(array_filter($a, is_string)) === count($a));
> >>
> >> That's not optimal though - granted assert code doesn't *have* to be
> >> optimal, but that's still a wordy construction.
> >
> > Personally I think that's fine, and doesn't need a language-level utility
> > function to wrap it any further.
> >
> > (Yes, that's a subjective metric.  So are most statements about what
> > should[n't] be included in the language itself.  Others are welcome to
> > disagree, but this falls below my threshold of necessity.)
> >
> > --Larry Garfield
>
>
> I agree with this sentiment from Larry. However I do think there is a
> function we could add:
>
>     function every(callable $predicate, traversable $input): bool {
>         foreach ($input as $value) {
>             if (!$predicate($value)) {
>                 return false;
>             }
>         }
>         return true;
>     }
>
> In which case the code would become:
>
>     assert(every('is_string', $input));
>
> Of course, when passing a traversable the caller must to be careful as
> it will be consumed. If they don't want that to happen they can
> convert it to an array (possibly with iterator_to_array).
>
> The reason this "every" function is better than "array_test" is
> because it is more general and works with more things than just types.
> The name "every" I borrowed from Clojure, but it's known by many
> names; in Java it is known as "allMatch".
>
> --
> PHP Internals - PHP Runtime Development Mailing List
> To unsubscribe, visit: http://www.php.net/unsub.php
>
>
I'm fine with this - I just want the inspector to be part of the language
so that a hidden dependency isn't required.

Reply via email to