13
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Ruby 3.2 で Set が組込みクラスになる?

Last updated at Posted at 2022-09-12

Array クラスの陰に隠れて存在感の薄い Set クラスですが,みなさん使ってますか?

Set クラスは文字どおり数学の「集合」を表すクラスです。標準添付ライブラリーなので(組込みではないので),require しないと使えません。

Set の影が薄い理由は,組込みクラスでないことに加え,集合にまつわるだいたいのことが Array で代用できてしまう,ということがあると思います。
これは,Array が「大クラス主義」的に設計されていて,他言語なら分けて設計するようなさまざまなデータ型の機能を Array に詰め込んでいるからですね。

しかし,「Set は要素の重複が無いことが確実」なのに対し,Array で集合を表すと要素の重複があるかもしれないので,最後に uniq をかます必要があったりします。
やはり集合のようなデータは Set クラスで表すのがよさそうです。
でも require が面倒。

なのですが,どうやら Ruby 3.2 で Set が組込みクラスになるようです。
https://www.ruby-lang.org/en/news/2022/09/09/ruby-3-2-0-preview2-released/
https://bugs.ruby-lang.org/issues/16989

現在,Ruby 3.2 は 3.2.0-preview2 が出ていて,Linux や macOS の人は rbenv で気軽にこの preview2 を試すことができます。
私もこれをインストールしてやってみました:

Ruby 3.2.0-preview2 にて
% ruby -e "p (1..4).to_set & Set[2, 4]"
#<Set: {2, 4}>

たしかに require 無しで to_setSet[ ] が使えました。

しかし,よく分からんのは,set ライブラリーって,いまは gem で提供されてるんですよね。
gem 形式の組込みクラスなんてあるの?

pp メソッドなんかは,これもやはり gem 形式のライブラリーで提供されているのですが,呼ばれると自動的に require されるようになっています。なので Kernel に最初から組み込まれているかのように使えるんですよね。これと似たようなものなのかな?

13
2
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?