[#105450] [Ruby master Feature#18228] Add a `timeout` option to `IO.copy_stream` — "byroot (Jean Boussier)" <noreply@...>
SXNzdWUgIzE4MjI4IGhhcyBiZWVuIHJlcG9ydGVkIGJ5IGJ5cm9vdCAoSmVhbiBCb3Vzc2llciku
11 messages
2021/09/27
[ruby-core:105110] [Ruby master Feature#18135] Introduce Enumerable#detect_only
From:
duerst <noreply@...>
Date:
2021-09-02 00:28:52 UTC
List:
ruby-core #105110
Issue #18135 has been updated by duerst (Martin D=FCrst).
meisel (Michael Eisel) wrote in #note-2:
> Also, another alternative could be `Enumerable#take_only`, where it takes=
the only element from the enumerable or else fails. So instead of:
> ```
> array.detect_only { |elem| some_method(elem) }
> ```
> =
> We'd have:
> =
> ```
> array.select { |elem| some_method(elem) }.take_only
> ```
It's a good idea to separate things out, but this could be highly inefficie=
nt (checking and selecting lots of elements only to find out later that the=
re's more than one).
----------------------------------------
Feature #18135: Introduce Enumerable#detect_only
https://bugs.ruby-lang.org/issues/18135#change-93520
* Author: meisel (Michael Eisel)
* Status: Open
* Priority: Normal
----------------------------------------
It can be important to get the only element for which a block returns true,=
and to assert that this is the only element as such. For example, this can=
be a very helpful sanity check when one is working with data that's outsid=
e of their control and is not perfectly understood. They may have a guess a=
s to how to get a specific element matching some criteria, but if they used=
Enumerable#detect might be hiding the fact that they have written an incor=
rect block and that there's in fact more than one element that matches it. =
It could also be a parameter on Typically, I'd do it like this:
```
matches =3D array.select { |elem| some_method(elem) }
raise if matches.size !=3D 0
match =3D matches.first
```
Here, it would be shortened to:
```
match =3D array.detect_only { |elem| some_method(elem) }
```
It could also be a parameter on Enumerable#detect instead of a separate met=
hod.
-- =
https://bugs.ruby-lang.org/
Unsubscribe: <mailto:ruby-core-request@ruby-lang.org?subject=3Dunsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>