Ruby で拡張する

MD Aminul Islam 2023年6月21日
  1. Ruby のincludeとは
  2. Ruby の extend とは
  3. Ruby で includeextend を使用する
Ruby で拡張する

クラスからクラス、関数から関数への参照は、オブジェクト指向プログラミングの一般的なタスクです。 異なるクラスからモジュールをインポートする方法を探している場合は、この記事が役に立ちます。

Ruby では、これを 2つの異なる方法で行うことができます。 include または extend のいずれかを使用します。

この記事では、Ruby の includeextend について説明し、トピックを簡単にするために関連する例を見ていきます。

Ruby のincludeとは

includeを使用すると、コード モジュールをインポートできます。 クラスを介してモジュールを直接インポートする方法を取得しようとすると、スーパークラスのサブクラスとしてインポートされるため、エラーが発生します。

ここでの解決策は、クラスのインスタンスによって取得することです。 キーワード include を使用して、include を使用できます。

Ruby の extend とは

モジュールをインポートする別の方法は、キーワード extend を使用することです。 extend を使用して、メソッドをクラス メソッドとしてインポートできます。

ただし、インスタンスを介してインポートされたモジュールのメソッドを取得しようとすると、エラーが発生します。 このエラーを回避するには、クラス定義でそのメソッドを取得する必要があります。

Ruby で includeextend を使用する

以下の例では、Ruby での include および extend キーワードの使用について説明します。 以下のサンプルコードを見てください。

module MyModule
  def MyMethod
    puts 'DelftStack is nice.'
  end
end

class ClassA

  # only can access MyModule methods
  # By the instance.
  include MyModule
end

class ClassB

  # only can access MyModule methods
  # By the class definition.
  extend MyModule
end

# Access from the object
ClassA.new.MyMethod

# Acess from class
ClassB.MyMethod

各行の目的はコメントアウトされ、キーワード include および extend の動作メカニズムについて説明されています。 上記のコード例を実行すると、以下の出力が得られます。

DelftStack is nice.
DelftStack is nice.

ここで、以下のようにクラスから直接メソッドにアクセスしようとすると:

ClassA.MyMethod

以下のエラーが表示されます。

# NoMethodError: undefined  method
# `MyMethod' for ClassA:Class

これは、ClassA がキーワード include を使用してモジュールをインクルードし、include ではクラスから直接メソッドを呼び出すことができないためです。

著者: MD Aminul Islam
MD Aminul Islam avatar MD Aminul Islam avatar

Aminul Is an Expert Technical Writer and Full-Stack Developer. He has hands-on working experience on numerous Developer Platforms and SAAS startups. He is highly skilled in numerous Programming languages and Frameworks. He can write professional technical articles like Reviews, Programming, Documentation, SOP, User manual, Whitepaper, etc.

LinkedIn