- - - 目次

Module

モジュールのクラス.

スーパークラス:

Object

メソッド:

attr(name[, public])

そのモジュールをインクルードするクラスのインスタンスに対して nameという属性とそのアクセスメソッドを定義します. アクセスメソッドの定義は次のようです.

def attr; @attr; end

省略可能な第2引数publicが指定され,その値が真であ る場合には書き込みメソッドname=も同時に定義され ます.その定義は以下のようです.

def attr=(val); @attr = val; end

アクセスメソッドを再定義することで属性の挙動を変更できます. 例えば書き込みメソッドを以下のように定義することで代入された 値をプリントできます.

attr("test", TRUE)
def test=(val)
  print("test was ", @test, "\n")
  print("and now is ", @test = val, "\n")
end

extend_object(object)

オブジェクトにモジュールの機能を追加します. Object#extend の実体です.

クラスメソッド:

include(module...)

指定されたモジュールの性質(メソッドや定数)を追加します. includeは多重継承の代わりに用いられるMixinを実 現するために使われます.

method_defined?(id)

モジュールのインスタンスがidで指定されたメソッド を持っている時,真を返します.

module_function(name...)

nameで指定されたメソッドをモジュール関数にします. モジュール関数とは通常のメソッドであると同時にモジュール(ま たはクラス)の特異メソッドでもあるようなメソッドです.例えば Mathモジュールで定義さ れているメソッドがモジュール関数です

private(name...)

メソッドをprivateであると指定します.メソッドが既にprivateで ある時にはなにもしません.privateなメソッドは関数形式(レシー バを省略した形式)でしか呼び出せません.

public(name...)

メソッドをどんな形式でも呼び出せるようにします.メソッドが既 にpublicであればなにもしません.

例:

def foo() 1 end
foo
       => 1
self.foo
       => 1

def bar() 2 end
private :bar
bar
       => 2
self.bar
       error--> private method `bar' called for "main"(Object)

Module Baz
  def baz() 3 end
  module_function :baz
end
Baz.baz
       => 3
include Baz
baz
       => 3
self.baz
       error--> private method `baz' called for "main"(Object)

private_class_method(name, ...)
public_class_method(name, ...)

nameで指定したクラスメソッド(クラスの特異メソッド) の可視性を変更します.


- - - 目次

matz@caelum.co.jp