フックメソッドについて
特定のタイミングで実行されるものです。
意味不明だと思うので、解説します。
included
includeではありません、included
です。
なんとなく、見覚えがあったのですが、違いを全く理解していませんでした。
includedメソッドは、includeメソッドによってモジュールが他のモジュールやクラスにインクルードされたあとに呼び出されます。引数にはモジュールをインクルードするクラスやモジュールが入ります。
どういうことか、コードで説明します。
module Foo def self.included(klass) puts "#{klass}にincludeされました" end end class Bar include Foo end =>Barにincludeされました
includeしたタイミングで上のputsが反応しています。
これを利用して、特異メソッド化する手法がよく使われます。
module Foo def self.included(klass) puts "#{klass}にincludeされました" klass.extend Methods end module Methods def foo 'foo' end end end class Bar include Foo end Bar.foo => "foo"
extendでMethodsをBarのみに使用できるようにしています。 これでincludeした場合に特異メソッド化ができます。
included
は単なるフックメソッドとして、使用されており、inlucdeとは全く違うものでした。
ここの理解を全くしていなかったな。