Project

General

Profile

Feature #16833

Updated by f3ndot (Justin Bull) almost 4 years ago

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 
 ```

Back