全てのクラスのスーパークラス。 オブジェクトの一般的な振舞いを定義します。
self == otherself と other が等しいかどうか判定します。
デフォルトでは 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オブジェクトの複製を作ります。
clone は freeze、taint、特異メソッドなどの情報も
含めた完全な複製を、dup はオブジェクトの内容のみの複製を
作ります。
clone や dup は「浅い(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
endeql?(other)二つのオブジェクトが等しいかどうかを判定します。このメソッドは Hash でふたつのキーが等しいかどうかを判定するのに使われます。 このメソッドを再定義した時には Object#hash メソッ ドも再定義しなければなりません。
eql? のデフォルトの定義は equal? と同じくオブジェクト
の同一性判定になっています。
equal?(other)other が self 自身の時、真を返します。
このメソッドを再定義してはいけません。
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 を評価してその結果を返 します。 fname、lineno が与えられた場合は、ファイル 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 オブジェクトを返します。name は
Symbol または文字列で指定します。
Module#instance_method も参照してください。
method_missing(name, args, ... )呼びだされたメソッドが定義されていなかった時、Ruby がこのメソッド を呼び出します。呼び出しに失敗したメソッドの名前 (Symbol) とそ の時の引数が name と arg ... に渡されます。
デフォルトではこのメソッドは例外 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 を持つとき真。 nameは Symbol または文字列です。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オブジェクトの文字列表現を返します。
print や sprintf は文字列以外の オブジェクトが引数に渡された場合このメソッドを使って文字列に変換し ます。
to_strオブジェクトの文字列への暗黙の変換が必要なときに呼ばれます。
untaintオブジェクトの「汚染マーク」を取り除きます。汚染マークを取り 除くことによる危険性はプログラマが責任を負う必要があります。
セキュリティレベルが3以上の場合は例外 SecurityError を 発生します。
オブジェクトの汚染に関してはセキュリティモデルを参照してください。
initializeユーザ定義クラスのオブジェクト初期化メソッド。このメソッドは
Class#new から新しく生成されたオブジェクトの初期化
のために呼び出されます。デフォルトの動作ではなにもしません。サブク
ラスではこのメソッドを必要に応じて再定義されることが期待されていま
す。initialize には Class#new に与えられた引
数がそのまま渡されます。
また initialize という名前を持つメソッドは自動的に private に
設定されます。
remove_instance_variable(name)オブジェクトからインスタンス変数 name を取り除き、そのインス タンス変数に設定されていた値を返します。name は Symbol か文字列です。
オブジェクトがインスタンス変数 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)特異メソッドが 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)特異メソッドが 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 のメソッドとしては定義され
ていません