【ruby】include VS extend
include
定義
moduleで定義されたメソッドを追加
rubyは多重継承は出来ないため、includeで必要な機能を追加 通常、moduleはインスタンスメソッドを使用出来ない。 includeしたクラスのスーパークラスとして継承されるため、 moduleに定義されたインスタンスメソッドが使用出来る。
extend
定義
モジュールで定義されたメソッドをselfの特異メソッドとして追加。
例えば、class内でextendした場合はmodule内で定義したmethodは クラスメソッドとして追加される。
module ModuleTest def module_test puts "test" end end Class IncludeTest include ModuleTest end Class ExtendTest extend ModuleTest end IncludeTest.new.module_test #test ExtendTest.module_test #test