Flight
クラス メソッドとインスタンス メソッドの両方で呼び出されるモジュールがあるとします。include
、extend
、または両方を使用して、そのメソッドをクラスに取得できます。
class Bat < Mammal
# Add Flight's class methods to Bat.
extend Flight
# Add Flight's instance methods to Bat.
include Flight
...
end
include
に追加Flight
されますBat.ancestors
が、追加されextend
ません。
私の質問は、モジュールとクラスでこれが異なるのはなぜですか? をサブクラス化するとMammal
、常にクラス メソッドとインスタンス メソッドの両方を一度に取得します。ただし、モジュールを混在させると、クラス メソッドとインスタンス メソッドの両方を一度に取得することはできませんself.included
(フックまたはActiveSupport::Concernのようなものを使用しない限り)。
この違いの背後にある言語設計の問題はありますか?