🖥

Ruby の refinements が分からない

2023/08/26に公開

Rubydoc には module M とか class C とか書かれていて分かりづらかったので、整理してみる。

二段階

  • Refine用のモジュールを独自定義して、オープンクラスの動作を書いておく ( Refine のためだけに使うモジュール )
  • あとで、好きなところで独自モジュールを「利用宣言」して、オープンクラスを「発動」させる

定義する

オープンクラスの「動作」を閉じ込めるイメージ。

# モジュールを独自定義
module MyRefineStringModule
  # あとでオープンしたい既存クラスを書く
  refine String do
    # 処理内容
    def first_5_characters
      self[0..4]
    end
  end
end

利用する

# Refinementsの利用宣言
using MyRefineStringModule

p "123456789".first_5_characters # 12345

感想

実際に使ってみると、やっていることは案外シンプルなんじゃないかという印象。
モジュールにオープンクラス処理を閉じ込めておいて、あとで発動させているんだろうな。

環境

  • ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-darwin17]

参考

チャットメンバー募集

何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ

Twitter

https://twitter.com/YumaInaura

公開日時

2018-07-09

Discussion