kachick / times_kachick

`#times_kachick channel in chat` as a public repository. Personal Note and TODOs
https://github.com/kachick/times_kachick/issues?q=is%3Aissue+is%3Aclosed
6 stars 0 forks source link

2021-11-16 - Hash の map は transform* では無く to_h で良さそう #155

Closed kachick closed 2 years ago

kachick commented 2 years ago

TL;DR

$ ruby -v
ruby 3.0.2p107 (2021-07-07 revision 0db68f0233) [x86_64-darwin20]
{a: 1, b: 2, B: 3}.to_h { |key, value| [key.upcase, value.succ] }
#=> {:A=>2, :B=>4}

経緯 / History

  1. 大分昔から、 Ruby の Hash を map したいけれどどうするのが良いのかみたいな話が主に初心者コミュニティでちょいちょい出ていた気がする。
  2. Enumerable#map は この用途に使いづらい。 その後 rails から backport する形で transform_keys や transform_values が導入されたけれど、 key か value のどちらかを変えるという物なので両方の transform は出来なかった。
  3. そういや to_h は Hash 自体にも定義されているけれど、あれはあくまで self を返すための物だと思って掘り下げた事がなかった。
  4. ふと思いついてブロックを渡したら新しい Hash を返してくれた。なのでまぁ to_h! というか transform! 的な破壊的メソッドを求めていないなら Hash#to_h で良いのでは。
  5. どれももう入ってからだいぶ経つ機能なのでとっくに知れ渡っているのかも知れないけれど、個人的に今日ふと思いついたのでメモっておく。