🖥
Ruby の refinements が分からない
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オープンチャットもご利用ください。
公開日時
2018-07-09
Discussion