Feature #7340

'each_with' or 'into' alias for 'each_with_object'

Added by Nathan Broadbent over 2 years ago. Updated over 2 years ago.

[ruby-core:49267]
Status:Open
Priority:Low
Assignee:-

Description

Following on from the discussions at #7297 and #7241, it is apparent that a shorter alias for 'each_with_object' would be much appreciated.


Related issues

Related to Ruby trunk - Feature #7384: Rename #each_with_object to #each_with Open 11/18/2012
Related to Ruby trunk - Feature #7297: map_to alias for each_with_object Rejected 11/07/2012
Related to Ruby trunk - Feature #6687: Enumerable#with Open 07/02/2012

History

#1 Updated by Yukihiro Matsumoto over 2 years ago

I dislike #into because it may or may not put something into the argument.
I am OK with #each_with.

Matz.

#2 Updated by kyo endo over 2 years ago

matz (Yukihiro Matsumoto) wrote:

I dislike #into because it may or may not put something into the argument.
I am OK with #each_with.

Matz.

I would appreciate if you could look at #6687. but #each_with is OK for me :-)

#3 Updated by Rodrigo Rosenfeld Rosas over 2 years ago

The reason I dislike each_with_object and each_with is the "each" on them. "each"'s return value isn't meaningful to me. That's why I would prefer "map_to", "map_into" or just "into".

"into" here doesn't mean putting values "into" the array or hash. It means: "turn/map object into a hash/array/whatever". It is not about putting something into the passed object, but about converting the original object (say numbers) into the object being passed as the initial value like a hash or an array.

It is ok to chain operations as a pattern (like the one used by jQuery) so that an_array.each{...}.sort would justify "each" returning the original "an_array", but only to be able to chain operations and not because "each" implies returning anything meaningful.

In that sense, each_with_object is currently supposed to return some meaningful value. That is why I'd prefer to call it "map_to", "map_into" or just "into".

numbers.map_into({}){...} should read "map numbers into a hash where ...". It would be even shorter if we just abbreviated "map_into" as just "into".

Also, if there is any chance that this wouldn't be an alias to each_with_object, I'd prefer the block's arguments order to be inverted to be symmetric to "inject".

#4 Updated by Matthew Kerwin over 2 years ago

On 13 November 2012 21:25, rosenfeld (Rodrigo Rosenfeld Rosas) <
rr.rosas@gmail.com> wrote:

Issue #7340 has been updated by rosenfeld (Rodrigo Rosenfeld Rosas).

The reason I dislike each_with_object and each_with is the "each" on them.
"each"'s return value isn't meaningful to me. That's why I would prefer
"map_to", "map_into" or just "into".

"into" here doesn't mean putting values "into" the array or hash. It
means: "turn/map object into a hash/array/whatever". It is not about
putting something into the passed object, but about converting the original
object (say numbers) into the object being passed as the initial value like
a hash or an array.

It is ok to chain operations as a pattern (like the one used by jQuery) so
that an_array.each{...}.sort would justify "each" returning the original
"an_array", but only to be able to chain operations and not because "each"
implies returning anything meaningful.

In that sense, each_with_object is currently supposed to return some
meaningful value. That is why I'd prefer to call it "map_to", "map_into" or
just "into".

numbers.map_into({}){...} should read "map numbers into a hash where ...".
It would be even shorter if we just abbreviated "map_into" as just "into".

Also, if there is any chance that this wouldn't be an alias to
each_with_object, I'd prefer the block's arguments order to be inverted to
be symmetric to "inject".

I believe, given that explanation, that #map_to is a far more appropriate
name than #map_into . . . and suddenly the reservations I had about this
alias start to fade away.

There is a clear semantic distinction between #each_with, where the focus
is on the action performed in the block, and #map_to, where the focus is on
the object returned from the block. So the question is: is this
alias/method meant to be an analogue for #each, or for #map ?

--
Matthew Kerwin, B.Sc (CompSci) (Hons)
http://matthew.kerwin.net.au/
ABN: 59-013-727-651

"You'll never find a programming language that frees
you from the burden of clarifying your ideas." - xkcd

#5 Updated by Akira Tanaka 11 months ago

  • Related to Feature #7384: Rename #each_with_object to #each_with added

#6 Updated by Akira Tanaka 11 months ago

  • Related to Feature #7297: map_to alias for each_with_object added

#7 Updated by Akira Tanaka 11 months ago

Also available in: Atom PDF