irbで試しましょう。
とりあえずこんなモジュールを用意します。
module Adef hello"hello"endend
そして使ってみます。まずはinclude。
class Binclude Aendtest = B.newtest.hello => #"hello"B.hello => #"NoMethodError"
次にextend。
class Cextend AendC.hello => #"hello"test = C.newtest.hello => #"NoMethodError"test.extend(A)test.hello => #"hello"
つまりincludeはインスタンスメソッドを差し込むのに対して、extendは特異メソッドを挿入するかたちになります。
だからクラス定義の中でextendすると、クラスの特異メソッド=クラスメソッドになります。
0 件のコメント:
コメントを投稿