Ruby で拡張する
クラスからクラス、関数から関数への参照は、オブジェクト指向プログラミングの一般的なタスクです。 異なるクラスからモジュールをインポートする方法を探している場合は、この記事が役に立ちます。
Ruby では、これを 2つの異なる方法で行うことができます。 include
または extend
のいずれかを使用します。
この記事では、Ruby の include
と extend
について説明し、トピックを簡単にするために関連する例を見ていきます。
Ruby のinclude
とは
include
を使用すると、コード モジュールをインポートできます。 クラスを介してモジュールを直接インポートする方法を取得しようとすると、スーパークラスのサブクラスとしてインポートされるため、エラーが発生します。
ここでの解決策は、クラスのインスタンスによって取得することです。 キーワード include
を使用して、include
を使用できます。
Ruby の extend
とは
モジュールをインポートする別の方法は、キーワード extend
を使用することです。 extend
を使用して、メソッドをクラス メソッドとしてインポートできます。
ただし、インスタンスを介してインポートされたモジュールのメソッドを取得しようとすると、エラーが発生します。 このエラーを回避するには、クラス定義でそのメソッドを取得する必要があります。
Ruby で include
と extend
を使用する
以下の例では、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
ではクラスから直接メソッドを呼び出すことができないためです。
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