[ruby-dev:51158] [Ruby master Feature#18573] Object#pack1

From: "byroot (Jean Boussier)" <noreply@...>
Date: 2022-02-08 08:51:37 UTC
List: ruby-dev #51158
Issue #18573 has been updated by byroot (Jean Boussier).


(using Google Translate to understand the discussion, sorry if I misunderstood or missed things).

Since `Object#pack1` might be deemed a bit too invasive, an alternative could be `String.pack1(format, arg)`, or even `String.pack(format, *args)`.

----------------------------------------
Feature #18573: Object#pack1
https://bugs.ruby-lang.org/issues/18573#change-96419

* 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/

In This Thread

Prev Next