Feature #2172
closedEnumerable#chunk with no block
Description
=begin
What should "(1..3).chunk" (i.e. without a block) do?
It issued an
ArgumentError: tried to create Proc object without a block
I changed the error message to "no block given" which I hope to be more informative, but maybe there is something more useful to do here?
A default block of {|x| x} doesn't seem all that useful.
Returning an enumerator that, upon completion, will return an enumerator would probably be better, but could also be a bit confusing if someone doesn't realize he forgot to specify the block?
Thanks to Run Paint for raising the question when writing the rubyspec for #chunk.
=end
        
          
          Updated by naruse (Yui NARUSE) about 16 years ago
          
          
        
        
      
      - Status changed from Open to Assigned
 - Assignee changed from matz (Yukihiro Matsumoto) to akr (Akira Tanaka)
 
        
          
          Updated by marcandre (Marc-Andre Lafortune) almost 16 years ago
          
          
        
        
      
      - Category set to core
 - Assignee changed from akr (Akira Tanaka) to matz (Yukihiro Matsumoto)
 - Target version set to 1.9.2
 
        
          
          Updated by marcandre (Marc-Andre Lafortune) almost 16 years ago
          
          
        
        
      
      - Assignee changed from matz (Yukihiro Matsumoto) to akr (Akira Tanaka)
 
        
          
          Updated by marcandre (Marc-Andre Lafortune) over 15 years ago
          
          
        
        
      
      Maybe a default block of {|x| x} can be useful for some people...
http://stackoverflow.com/questions/2516312/remove-adjacent-identical-elements-in-a-ruby-array
        
          
          Updated by znz (Kazuhiro NISHIYAMA) over 15 years ago
          
          
        
        
      
      - Target version changed from 1.9.2 to 2.0.0
 
        
          
          Updated by tokland (Arnau Sanchez) about 13 years ago
          
          
        
        
      
      Any decision about this? For me it's a clear +1, chunking by the values unchanged is very common (not that it's representative, but I checked my code: 4 ocurrences of chunk, all with the identity block)
        
          
          Updated by akr (Akira Tanaka) about 13 years ago
          
          
        
        
      
      - Description updated (diff)
 - Target version changed from 2.0.0 to 2.6
 
        
          
          Updated by marcandre (Marc-Andre Lafortune) about 9 years ago
          
          
        
        
      
      - Assignee changed from akr (Akira Tanaka) to matz (Yukihiro Matsumoto)
 
Matz, would you agree to return enumerator for chunk without a block?
This is useful in particular to chain it with with_index
A real case example is to summarize a list of integers into ranges. Currently, we need:
integers.enum_for(:chunk).with_index { |x, idx| x - idx }.map do |diff, group|
  [group.first, group.last]
end
        
          
          Updated by marcandre (Marc-Andre Lafortune) about 9 years ago
          
          
        
        
      
      Forgot to note that the other possiblity suggested for chunk with no block can now be done clearly and succintly with chunk(&:itself), so there's no longer any doubt that the block without block should return an Enumerator
        
          
          Updated by matz (Yukihiro Matsumoto) about 9 years ago
          
          
        
        
      
      Now it sounds reasonable. Marc-Andre, could you implement it?
Matz.
        
          
          Updated by marcandre (Marc-Andre Lafortune) about 9 years ago
          
          
        
        
      
      Great, thanks!
Done for chunk.
Matz, I imagine I should do the same for chunk_while, slice_after, slice_before and slice_when, right?
        
          
          Updated by marcandre (Marc-Andre Lafortune) about 9 years ago
          
          
        
        
      
      - Status changed from Assigned to Closed
 
Closing, created #12813 instead.