Skip to content

Instantly share code, notes, and snippets.

@kachick
Last active March 14, 2021 17:55
Show Gist options
  • Save kachick/3765325 to your computer and use it in GitHub Desktop.
Save kachick/3765325 to your computer and use it in GitHub Desktop.
Enumerable#each_with_object が嫌いな理由

Enumerable#each_with_object が嫌いだ。

もちろん動作自体は非常に有益だと思っているので、名前が嫌いなんだなーという結論になってしまうんだけど。

名前が長いというのはまぁそうなんだけど、その事自体は大した問題じゃない。
動作と名前が一致しているなら、後から良い短い名前が見つかった時aliasつければ別に困らない。
このメソッドが嫌いなのは、eachから始まっているところだ。
他のeach[_foo]系はブロック付の時にself返すのに、これだけ引数を返す。
これは類推できない、なので嫌だ。 代案の一つとして、こういうのはどうか

要らないforの有効活用

module Enumerable
  alias_method :for, :each_with_object
end

class Enumerator
  alias_method :for, :with_object
end

[1, 2, 3].for([]){|n, a|a << n * 2}      #=> [2, 4, 6]
[1, 2, 3].each.for([]){|n, a|a << n * 2} #=> [2, 4, 6]

Kernelにも付けてtapと対にしようかなと思ったけど、特に意味なさそうなのでやめといた。

@kachick
Copy link
Author

kachick commented Sep 22, 2012

長いという観点からの変更提案はすでにあるっぽい。

http://melborne.github.com/2012/07/03/feature-request-enumerable-with/
http://bugs.ruby-lang.org/issues/6687

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment