Help us understand the problem. What is going on with this article?

クラス内にモジュールがincludeされているか確認する方法

More than 1 year has passed since last update.

モジュールの用途

・Rubyは単一継承のため、1つのクラスには1つのスーパークラスしか持てないので、複数のインスタンスメソッド、クラスメソッドを継承関係で使用したいときにモジュールを使用→Mix-in
・namespace(名前空間)の作成
・シングルトンオブジェクトのように扱って設定値などを保持する

Mix-inする方法

・extend
→モジュール内のメソッドをそのクラスの特異メソッド(つまりクラスメソッド)にすることができる。
・include
→モジュール内のメソッドをそのクラスのインスタンスメソッドにすることができる。

あるクラスに特定のモジュールがincludeされているか確認する方法

module Loggable
end

class Product
  include Loggable
end

上記のような、Productクラス内でLoggableモジュールをincludeしているコードがあったとします。

Product.include?(Loggable)
=> true

クラスオブジェクトに対してinclude?メソッドを呼ぶと引数で渡したモジュールがincludeされているかどうか確認することができます。

Product.included_modules
=>[Loggable,Kernel]

included_modulesメソッドを使用することで、includeされているモジュールの配列が返します。

※Kernelモジュールは、ProductのスーパークラスであるObjectクラスでincludeされているモジュールです。

(Kernelモジュールのリファレンスマニュアル)
https://docs.ruby-lang.org/ja/latest/class/Kernel.html

Product.ancestors
=> [Product, Loggable, Object, Kernel, BasicObject]

ancestorsメソッドを使用することでモジュールだけでなく、スーパークラスの情報も配列になって返すことができます。

product = Product.new
product.class.include?(Loggable)
=> true
product.class.included_modules
=> [Loggable, Kernel]

classメソッドを使用することで、クラスオブジェクトだけでなく、クラスのインスタンスからもincludeされているモジュールの情報が取得することができます。

Product.superclass
=> Object

superclassメソッドでスーパークラスを表示することもできます。

【参考記事】
プロを目指す人のためのRuby入門 言語仕様からテスト駆動開発・デバッグ技法まで(書籍)

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした