Issue #16833 has been updated by sawa (Tsuyoshi Sawada).


Your use case is not clear. What can't you do this?

```ruby
table_rows = [{ data: ['First', 'Second', 'Third'], config: {} }, { data: [4, 5, 6], config: { color: 'red' } }].to_enum
table_rows.to_a.dig(0, :data) # => ["First", "Second", "Third"]

table_rows = [].to_enum
table_rows.to_a.dig(0, :data) # => nil
```

I don't understand why you need to conditionally return as in your code.

----------------------------------------
Feature #16833: Add Enumerator#empty?
https://bugs.ruby-lang.org/issues/16833#change-85392

* Author: f3ndot (Justin Bull)
* Status: Open
* Priority: Normal
----------------------------------------
It was surprising to me that Enumerator, something mixed into Array, does not include `#empty?`. I think it is reasonable to assume people may have to guard iterating and other logic based on the emptiness of an enumerator, such was my case.


``` ruby
 # pretend there's convoluted enumerator logic to produce this structure
table_rows = [{ data: ['First', 'Second', 'Third'], config: {} }, { data: [4, 5, 6], config: { color: 'red' } }].to_enum

return if table_rows.empty?

table_header = table_rows.first[:data] # requires an empty guard
# ...
```

I propose that it simply behaves as `#take(1).to_a.empty?` instead of aliasing to something like `#none?` because of falsey elements or `#size == 0` because of potential `nil` returns:

```ruby
[].to_enum.empty?        # => true
[false].to_enum.empty?   # => false
[nil].to_enum.empty?     # => false
[0].to_enum.empty?       # => false
[1, 2, 3].to_enum.empty? # => false
```

---Files--------------------------------
add-enumerable-empty.patch (1.99 KB)


-- 
https://bugs.ruby-lang.org/

Unsubscribe: <mailto:ruby-core-request / ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>