Object

全てのクラスのスーパークラス。 オブジェクトの一般的な振舞いを定義します。

インクルードしているモジュール:

メソッド:

self == other

selfother が等しいかどうか判定します。 デフォルトでは equal? と同じ効果です。

このメソッドは各クラスの性質に合わせて再定義するべきです。

self =~ other

古いタイプの正規表現比較 obj =~ /RE/ をサポートす るためのメソッドです。デフォルトは Object#== と同じ働きをします。 *1

self === other

このメソッドは case 文での比較に用いられます。デフォルトは Object#== と同じ働きをしますが、 この挙動はサブクラスで所属性のチェックを実現するため 適宜再定義されます。

become(obj) ((<ruby 1.7 feature>))

self の内容を obj ですり替えます。obj は、 self と同じクラスのインスタンスである必要があります。そうで なければ例外 TypeError が発生します。

class Foo
end

p obj = Foo.new
obj.instance_eval { @v = 1 }
p obj.become(Foo.new)
obj.instance_eval { p @v }

=> ruby 1.7.3 (2002-08-30) [i586-linux]
   #<Foo:0x401a8910>
   -:6: [BUG] Segmentation fault
   ruby 1.7.3 (2002-08-30) [i586-linux]

self を返します。

class
type

レシーバのクラスを返します。

ruby 1.7 feature: type は、version 1.7 では、obsolete となりました。

clone
dup

オブジェクトの複製を作ります。 clonefreezetaint、特異メソッドなどの情報も 含めた完全な複製を、dup はオブジェクトの内容のみの複製を 作ります。

clonedup は「浅い(shallow)」コピーであることに注意 してください。オブジェクト自身を複製するだけで、オブジェクトの指し ている先(たとえば配列の要素など)までは複製しません。

また複製したオブジェクトに対して

obj.equal?(obj.clone)

は一般に成立しませんが *2

obj == obj.clone

は多くの場合に成立します。

true, false, nil, Symbol オブジェクトなど を複製しようとすると例外 TypeError が発生します。

ruby 1.7 feature: version 1.7 では、Numeric オブジェクトなど immutable(内容不 変)であるオブジェクトを複製しようとすると例外 TypeError が発 生します。

display([out=$defout])

オブジェクトを out に出力します。以下のように定義できます。

class Object
  def display(out=$defout)
    out.print to_s
  end
end
eql?(other)

二つのオブジェクトが等しいかどうかを判定します。このメソッドは Hash でふたつのキーが等しいかどうかを判定するのに使われます。 このメソッドを再定義した時には Object#hash メソッ ドも再定義しなければなりません。

eql? のデフォルトの定義は equal? と同じくオブジェクト の同一性判定になっています。

equal?(other)

otherself 自身の時、真を返します。 このメソッドを再定義してはいけません。

extend(module ... )

引数で指定したモジュールで定義されているメソッドが self の 特異メソッドとして追加されます。あるオブジェクトだけにモジュール の機能を追加したいときに使用します。

module Foo
  def a
    'ok'
  end
end

obj = Object.new
obj.extend Foo
p obj.a         #=> "ok"

extend の機能は、「特異クラスに対する include」 と言い替えることもできます。

ruby 1.7 feature: 引数に複数のモジュールを指定した場合、最後 の引数から逆順に extend を行います。

freeze

オブジェクトの内容の変更を禁止します。 フリーズされたオブジェクトの変更は例外 TypeError を発生させます。

frozen?

オブジェクトの内容の変更が禁止されているときに真を返します。

hash

オブジェクトのハッシュ値を返します。Hash クラスで オブジェクトを格納するのに用いられています。A.eql?(B) が 成立する時は必ず A.hash == B.hash も成立しなければ いけません。eql?を再定義した時には必ずこちらも合わせて 再定義してください。

デフォルトでは、Object#id と同じ値をハッシュ値とし ます。ただし、Fixnum, Symbol, String だけは組込 みのハッシュ関数が使用されます(これを変えることはできません)。

hash を定義する場合は、一様に分布する任意の整数を返すようにします (現在の実装では、返り値の内部表現を 65439 (1.7 なら 536870917) *3 で割った余りをハッシュ値とします*4

id
__id__
object_id ((<ruby 1.7 feature>))

各オブジェクトに対して一意な整数を返します。あるオブジェクトに対し てどのような整数が割り当てられるかは不定です。

id メソッドの再定義に備えて別名 __id__ が用意されて おり、ライブラリでは後者の利用が推奨されます。また __id__ を 再定義すべきではありません。

inspect

オブジェクトを人間が読める形式の文字列に変換します。

instance_eval(expr, [fname, [lineno=1]])
instance_eval {|obj| ... }

オブジェクトのコンテキストで文字列 expr を評価してその結果を返 します。 fnamelineno が与えられた場合は、ファイル fname、 行番号 lineno にその文字列があるかのようにコンパイルされ、ス タックトレース表示などのファイル名/行番号を差し替えることができま す。

ブロックが与えられた場合にはそのブロックをオブジェクトのコンテキス トで評価してその結果を返します。ブロックの引数 obj には self が渡されます。

オブジェクトのコンテキストで評価するとは self をそのオブジェ クトにして実行するということです。また、文字列/ブロック中でメソッ ドを定義すれば self の特異メソッドが定義されます。

ただし、ローカル変数だけは instance_eval の外側のスコープと 共有します。

: メソッド定義の中で instance_eval のブロックを使用してメ ソッド定義を行うと、"nested method definition" とコンパイルエラー になります。これは、現在の ruby パーサの制限です。

def foo
   instance_eval {
     def bar            # <- ネストしたメソッド定義と判断される
       "bar"
     end
   }
end

# => -:4: nested method definition

文字列で渡す形式を使えば、この制限は回避できます。

def foo
   instance_eval %Q{
     def bar
       "bar"
     end
   }
end

# foo を実行すると関数(厳密には foo のレシーバのメソッド) bar 
# を定義する
foo
p bar
# => "bar"

Module#module_eval, Module#class_eval も参照してください。

instance_of?(klass)

self がクラス klass の直接のインスタンスである時、 真を返します。obj.instance_of?(c) が成立する時には、常に obj.kind_of?(c) も成立します。

instance_variables

オブジェクトのインスタンス変数名を文字列の配列として返します。

local_variables, global_variables, Module.constants, Module#constants, Module#class_variables も参照してください。

is_a?(mod)
kind_of?(mod)

self が、クラス mod とそのサブクラス、および モジュール mod をインクルードしたクラスとそのサブクラス、 のいずれかのインスタンスであるとき真を返します。

module M
end
class C < Object
  include M
end
class S < C
end

obj = S.new
p obj.is_a? S       # true
p obj.is_a? M       # true
p obj.is_a? C       # true
p obj.is_a? Object  # true
p obj.is_a? Hash    # false
method(name)

self のメソッド name をオブジェクト化した Method オブジェクトを返します。nameSymbol または文字列で指定します。

Module#instance_method も参照してください。

method_missing(name, args, ... )

呼びだされたメソッドが定義されていなかった時、Ruby がこのメソッド を呼び出します。呼び出しに失敗したメソッドの名前 (Symbol) とそ の時の引数が namearg ... に渡されます。

デフォルトではこのメソッドは例外 NameError を発生させます。

methods
public_methods

そのオブジェクトが理解できるpublicメソッド名の一覧を配列とし て返します。

Module#instance_methods, Module#public_instance_methods, も参照してください。

nil?

レシーバが nil かどうかをチェックします。

private_methods

そのオブジェクトが理解できるprivateメソッド名の 一覧を配列として返します。

Module#private_instance_methods, も参照してください。

protected_methods

そのオブジェクトが応答できる protected メソッド名の 一覧を文字列の配列で返します。

Module#protected_instance_methods, も参照してください。

respond_to?(name[, priv=false])

オブジェクトが public メソッド name を持つとき真。 nameSymbol または文字列です。priv が 真のときは private メソッドに対しても真を返します。

send(name[, args ... ])
send(name[, args ... ]) { .... }
__send__(name[, args ... ])
__send__(name[, args ... ]) { ... }

オブジェクトのメソッド name を、引数に args を 渡して呼び出します。ブロック付きで呼ばれたときはブロックも そのまま引き渡します。メソッド名 name は文字列か Symbol です。

send が再定義された場合に備えて別名 __send__ も 用意されており、ライブラリではこちらを使うべきです。また __send__ は再定義すべきではありません。

send, __send__ は、呼び出し制限 にかかわらず任意のメソッドを呼び出せます。

singleton_methods([all=false])

そのオブジェクトに対して定義されている特異メソッド名の一覧を 配列として返します。

ruby 1.7 feature: 省略可能な引数 all に真を指定すれば 特異クラスがインクルードしているモジュールのメソッドも対象になります。

obj = Object.new

module Foo
  def foo
  end
end

class <<obj
  include Foo
  def bar
  end
end
p obj.singleton_methods      #=> ["bar"]
p obj.singleton_methods true #=> ["bar", "foo"]

あるいは、Object#extend は特異クラスに対するイ ンクルードなので以下も同様になります。

obj = Object.new

module Foo
  def foo
  end
end

obj.extend(Foo)
p obj.singleton_methods      #=> []
p obj.singleton_methods true #=> ["foo"]
taint

オブジェクトの「汚染マーク」をセットします。

オブジェクトの汚染に関してはセキュリティモデルを参照してください。

tainted?

オブジェクトの「汚染マーク」がセットされている時真を返します。

オブジェクトの汚染に関してはセキュリティモデルを参照してください。

to_a

オブジェクトを配列に変換します。普通に配列に変換できない オブジェクトは、自身のみを含む長さ 1 の配列に変換されます (ruby 1.7 feature: この挙動は将来なくなるかもしれません。1.7 では警告が出ます)。

p( {'a'=>1}.to_a )  # [["a", 1]]
p ['array'].to_a    # ["array"]
p 1.to_a            # [1]
p 'str'.to_a        # ["str"]
to_ary

オブジェクトの配列への暗黙の変換が必要なときに内部で呼ばれます。 *5

このメソッドが定義されたオブジェクトが単独で多重代入の右辺に 現れた場合にも呼ばれます。

class Foo
  def to_ary
    [1, 2, 3]
  end
end

a, b, c = Foo.new
p [a, b, c]

=> [1, 2, 3]
to_hash

オブジェクトのハッシュへの暗黙の変換が必要なときに内部で呼ばれます。

to_int

オブジェクトの整数への暗黙の変換が必要なときに内部で呼ばれます。

to_s

オブジェクトの文字列表現を返します。

printsprintf は文字列以外の オブジェクトが引数に渡された場合このメソッドを使って文字列に変換し ます。

to_str

オブジェクトの文字列への暗黙の変換が必要なときに呼ばれます。

untaint

オブジェクトの「汚染マーク」を取り除きます。汚染マークを取り 除くことによる危険性はプログラマが責任を負う必要があります。

セキュリティレベルが3以上の場合は例外 SecurityError を 発生します。

オブジェクトの汚染に関してはセキュリティモデルを参照してください。

プライベートメソッド:

initialize

ユーザ定義クラスのオブジェクト初期化メソッド。このメソッドは Class#new から新しく生成されたオブジェクトの初期化 のために呼び出されます。デフォルトの動作ではなにもしません。サブク ラスではこのメソッドを必要に応じて再定義されることが期待されていま す。initialize には Class#new に与えられた引 数がそのまま渡されます。

また initialize という名前を持つメソッドは自動的に private に 設定されます。

remove_instance_variable(name)

オブジェクトからインスタンス変数 name を取り除き、そのインス タンス変数に設定されていた値を返します。nameSymbol か文字列です。

オブジェクトがインスタンス変数 name を持たない場合は例外 NameError が発生します。

class Foo
  def foo
    @foo = 1
    p remove_instance_variable :@foo # => 1
    p remove_instance_variable :@foo # => instance variable @foo not defined (NameError)
  end
end
Foo.new.foo

Module#remove_class_variable, Module#remove_const も参照してください。

singleton_method_added(name)

特異メソッドが追加された時にインタプリタから呼び出されます。 name には追加されたメソッド名が Symbol で渡されます。

class Foo
  def singleton_method_added(name)
    puts "singleton method \"#{name}\" was added"
  end
end

obj = Foo.new
def obj.foo
end

=> singleton method "foo" was added

通常のメソッドの追加に対するフックには Module#method_addedを使います。

singleton_method_removed(name)

ruby 1.7 feature

特異メソッドが Module#remove_method に より削除された時にインタプリタから呼び出されます。 name には削除されたメソッド名が Symbol で渡されます。

class Foo
  def singleton_method_removed(name)
    puts "singleton method \"#{name}\" was removed"
  end
end

obj = Foo.new
def obj.foo
end

class << obj
  remove_method :foo
end

=> singleton method "foo" was removed

通常のメソッドの削除に対するフックには Module#method_removedを使います。

singleton_method_undefined(name)

ruby 1.7 feature

特異メソッドが Module#undef_method または undef により未定義にされた時にインタプリタ から呼び出されます。 name には未定義にされたメソッド名が Symbol で渡されます。

class Foo
  def singleton_method_undefined(name)
    puts "singleton method \"#{name}\" was undefined"
  end
end

obj = Foo.new
def obj.foo
end
def obj.bar
end

class << obj
  undef_method :foo
end
obj.instance_eval {undef bar}

=> singleton method "foo" was undefined
   singleton method "bar" was undefined

通常のメソッドの未定義に対するフックには Module#method_undefined を使います。


*1あらい 2002-01-13: 本当は違う ruby-bugs-ja:PR#178[外部]
*2version 1.6 では、0.equal?(0.clone) が成立してしまいます
*3あらい 2002-01-13: 素数じゃなくていいのかな?
*4あらい 2002-01-13: 本当はこれを 更に内部のテーブルサイズで割った余りが使用されます。 あらい 2002-02-24: これは素数になりましたrubyist:1020[外部]
*5to_ary, to_hash, to_int, to_str は、説明の便宜上このページに書 いてますが、デフォルトでは Object のメソッドとしては定義され ていません