From: "knu (Akinori MUSHA)" Date: 2022-02-07T02:49:05+00:00 Subject: [ruby-dev:51155] [Ruby master Feature#18573] Object#pack1 Issue #18573 has been updated by knu (Akinori MUSHA). packしたいもの(のclass)はすごく限定的なので、Objectに生やすのはどうかなあと思いました。 ---------------------------------------- Feature #18573: Object#pack1 https://bugs.ruby-lang.org/issues/18573#change-96398 * Author: os (Shigeki OHARA) * Status: Open * Priority: Normal ---------------------------------------- # 概要 String#unpack1 の逆の Object#pack1 が欲しい。 # 背景 Array#pack というメソッドがありますが、レシーバーの Array の要素数が 1 つしかないことが良くあります。 ``` ruby [codepoint].pack('U') [digest].pack('m0') [mail_body].pack('M') [ip_address].pack('N') ``` 標準添付ライブラリーなどを眺めてみてもチラホラあるようです。 ですが、このようなケースで変換対象のオブジェクトをわざわざ Array でくるまなくてはいけないというのは面倒な気もします。 # 提案 String#unpack に対して String#unpack1 というメソッドがありますが、 Array#pack に対する Object#pack1 というメソッドを提案します。 イメージとしては以下のコードのような感じです。 ``` ruby class Object def pack1(template, option = {}) [self].pack(template, **option) end end ``` # 議論・課題 * Object で良いかどうかは議論の余地があろうかと思います * メソッド名が pack1 で良いかはわかりませんが、他とかぶる可能性は低いかと思います -- https://bugs.ruby-lang.org/