タグ

includeに関するtakaesuのブックマーク (2)

  • moduleのメソッドをクラスメソッドとして追加したい - うなの日記

    moduleのメソッドを、クラスのクラスメソッドとして追加したい場合、Object#extendが利用できます。 extendは「引数で指定したモジュールのインスタンスメソッドを self の特異メソッドとして追加します」。 クラスのコンテキストで実行することで、クラスの特異メソッド(=クラスメソッド)として、モジュールのメソッドを追加できます。 もちろん、インスタンスをレシーバにして呼び出すことも可能です。その場合、インスタンスの特異メソッドとして追加されます。 includeの場合、クラスのインスタンスメソッドとして追加されます。 ちなみに、extend,includeともにモジュールの特異メソッドは追加対象になりません。 # モジュール module Foo def foo puts "foo" end def self.var puts "var" end end # Fooをex

    moduleのメソッドをクラスメソッドとして追加したい - うなの日記
    takaesu
    takaesu 2015/10/29
    取り込みたいモジュールにselfで始まるメソッド(特異メソッド)があっても、extend と include どちら取り込むことはできない。
  • Rubyのmoduleをmix-inする際のincludeとextendの違いをシンプルな例で理解する

    Rubyのclassにmoduleをmix-inする場合に、moduleをclassにincludeした場合とclassをmoduleでextendした場合で何が違うのか? よく判らなくなるのでシンプルな実例でまとめます。 「モジュールがクラスメソッドではなく、インスタンスメソッドを定義しているとき、これらのインスタンスメソッドは、ほかのクラスにミックスインできる」(「プログラミング言語Ruby」261ページ)とあります。そして「モジュールをミックスインするための通常の方法は、Module.includeメソッドだが、Object.extendを使う方法もある」(同262ページ)となっています。includeとextendで何が違うの? となり、時どき理解の足りない書き方をしてNoMethodError: undefined method...のような例外をだしてしまうことがあります。そこ

  • 1