【一人 bugs.ruby Advent Calendar 2020】[Feature #17292] Hash Shorthand / Punning【19日目】
一人 bugs.ruby Advent Calendar 2020 19日目の記事になります。
[Feature #17292] Hash Shorthand / Punning
これは { a:, b:, c: }
を { a: a, b: b, c: c }
のように展開しようという提案です。
a = 1 b = 2 c = 3 { a:, b:, c: } # => { a: 1, b: 2, c: 3 }
この手の提案は昔から多くてわたしもいくつか似たような機能の提案しました。
- [Feature #15286] Proposal: Add Kernel.#expand(*args)
- [Feature #14973] Proposal of percent literal to expand Hash
今思うとよくこんな提案しようと思ったなあ、と懐かしくなりますが…。
多分一番最古のチケットな以下のチケットかな? 関連するチケット
を見てもらえればどれだけ同じような提案がされていたのかが分かると思います(そして全部 Reject されています…。
そんな Reject されまくっているチケットですが今回チケットを建てたモチベーションとしては { a:, b:, c: }
という記述はパターンマッチでも書かれる記述になったのでどうだろうか、と書かれています。
case { x: 1, y: 2 } in { x:, y: } { x:, y: y + 1} # new else # ... end
この書き方は右代入(や1行 in
)でも書かれているのでこのあたりが一般化すれば承認されそうな感じはしますねえ。