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 15 years ago
- Status changed from Open to Assigned
- Assignee changed from matz (Yukihiro Matsumoto) to akr (Akira Tanaka)
Updated by marcandre (Marc-Andre Lafortune) about 15 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) about 15 years ago
- Assignee changed from matz (Yukihiro Matsumoto) to akr (Akira Tanaka)
Updated by marcandre (Marc-Andre Lafortune) over 14 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 14 years ago
- Target version changed from 1.9.2 to 2.0.0
Updated by tokland (Arnau Sanchez) over 12 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 12 years ago
- Description updated (diff)
- Target version changed from 2.0.0 to 2.6
Updated by marcandre (Marc-Andre Lafortune) about 8 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 8 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 8 years ago
Now it sounds reasonable. Marc-Andre, could you implement it?
Matz.
Updated by marcandre (Marc-Andre Lafortune) about 8 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 8 years ago
- Status changed from Assigned to Closed
Closing, created #12813 instead.