2008年5月2日金曜日

Chapter 9 Modules

要点のみ。

Modulesの利点は2つ。
名前空間の提供
mixin機構

  • Namespaces

    module Trig
    PI = 3.14
    def Trig.sin(x)
    ...
    end
    が構文例。
    Trig.sin
    Trig::PI
    とアクセス。

    上の例は、クラスメソッドな書き方。
    mixinするときは、インスタンスメソッドとして書く。

    module Debug
    def who_am_i?
    ...
    end
    class Phonograph
    include Debug
    ...
    end

    なんぞ。このincludeはコピーではなく参照なり。
    module側の関数からclassの中のmethodもcallできる。

  • Iterators and the Enumerable Module

    rubyのCollection classの機能を自前classにももたせたいとき、
    継承ではなく、mixinという手もある。そのときはEnumeration module
    をincludeする。

  • Composing Modules

    method callしたときに何が呼ばれるかは、動的スコープ、ということかな?
    それがどのクラスで定義されているかとか、どのモジュールで定義されている
    かは関係なく、実行時に参照されるものが実行される?


    • Instance Variables in Mixins

      通常mixinするモジュールにはinstance変数をもたせない。
      持つこともある。
      持っている場合、mixinしたときに名前がぶつかると、混乱する。
      idで、object id を参照できるので、状態を扱うにあたって、
      instance variablesではなく、hashを使うという手もある。

    • Resolving Ambiguous Method Names

      effective method orderの話。

      object -> mixin -> superclass ->superclass へのmixin -> ...


  • Including Other Files

    loadとrequire。
    requireは一回だけ。
    loadとrequireする対象ファイルのtop level変数は、そのファイル
    の中だけをスコープとする。

0 件のコメント: