Why does Array#each return an array with the same elements?

心已入冬 提交于 2019-12-05 12:51:18

问题


I'm learning the details of how each works in ruby, and I tried out the following line of code:

p [1,2,3,4,5].each { |element| el }

And the result is an array of

[1,2,3,4,5]

But I don't think I fully understand why. Why is the return value of each the same array? Doesn't each just provide a method for iterating? Or is it just common practice for the each method to return the original value?


回答1:


Array#each returns the [array] object it was invoked upon: the result of the block is discarded. Thus if there are no icky side-effects to the original array then nothing will have changed.

Perhaps you mean to use map?

p [1,2,3,4,5].map { |i| i*i }



回答2:


Array#each

The block form of Array#each returns the original Array object. You generally use #each when you want to do something with each element of an array inside the block. For example:

[1, 2, 3, 4, 5].each { |element| puts element }

This will print out each element, but returns the original array. You can verify this with:

array = [1, 2, 3, 4, 5]
array.each { |element| element }.object_id === array.object_id
=> true

Array#map

If you want to return a new array, you want to use Array#map or one of its synonyms. The block form of #map returns a different Array object. For example:

array.object_id
=> 25659920
array.map { |element| element }.object_id
=> 20546920
array.map { |element| element }.object_id === array.object_id
=> false

You will generally want to use #map when you want to operate on a modified version of the original array, while leaving the original unchanged.




回答3:


All methods return something. Even if it's just a nil object, it returns something.

It may as well return the original object rather than return nil.




回答4:


If you want, for some reason, to suppress the output (for example debugging in console) here is how you can achive that

  [1,2,3,4,5].each do |nr|
    puts nr.inspect
  end;nil


来源:https://stackoverflow.com/questions/11596879/why-does-arrayeach-return-an-array-with-the-same-elements

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!