Project

General

Profile

Actions

Feature #7340

open

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

Added by nathan.f77 (Nathan Broadbent) over 11 years ago. Updated about 6 years ago.

Status:
Open
Assignee:
-
Target version:
-
[ruby-core:49267]

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 3 (2 open1 closed)

Related to Ruby master - Feature #7384: Rename #each_with_object to #each_withOpenActions
Related to Ruby master - Feature #7297: map_to alias for each_with_objectRejected11/07/2012Actions
Related to Ruby master - Feature #6687: Enumerable#withOpenActions

Updated by matz (Yukihiro Matsumoto) over 11 years ago

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

Matz.

Updated by merborne (kyo endo) over 11 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 :-)

Updated by rosenfeld (Rodrigo Rosenfeld Rosas) over 11 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".

Updated by phluid61 (Matthew Kerwin) over 11 years ago

On 13 November 2012 21:25, rosenfeld (Rodrigo Rosenfeld Rosas) <
> 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

Updated by akr (Akira Tanaka) almost 10 years ago

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

Updated by akr (Akira Tanaka) almost 10 years ago

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

Updated by akr (Akira Tanaka) almost 10 years ago

Actions #8

Updated by naruse (Yui NARUSE) about 6 years ago

  • Target version deleted (2.6)
Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0Like0Like0Like0